2017-01-03 96 views
0
我使用Browserify訪問從index.html文件節點模塊

之後,從index.html的引用(託管在谷歌應用程序引擎)Browserify模塊不能包括bundle.js腳本

我導入模塊一個「main.js」的文件,如我看到的是Browserify文檔中的標準,如下所示:

browserify main.js -o bundle.js 

var request = require('request'); 
var fs = require('fs'); 

我然後使用下面的命令捆綁此成一個bundle.js文件

這成功地生成了所需的bundle.js文件。然後,我這包括在頭在我的index.html頂部如下:

<HEAD> 
    <script src="/scripts/bundle.js"></script> 

    <script src="/scripts/util/loader.js"></script> 
    <!-- More scripts below here --> 

的index.html的身體內的腳本會使得它使用線loader.js內函數的調用

request('api.my-url.com/world').pipe(fs.createWriteStream('/resources/myMap.json')); 

我用它來試圖創建一個包含響應內容的文件。然而,當我在GAE上部署此,和訪問的index.html,我被錯誤消息映入眼簾:

loader.js:15 Uncaught ReferenceError: request is not defined 
    at loadWorld (loader.js:15) 
    at Object.create ((index):55) 

如果我嘗試和移動的要求()調用到腳本index.html中我得到同樣的問題,但如果我將該行移入main.js,我不再會遇到這個問題。

我想這是下降到JavaScript的一個個人誤解,但我似乎無法找出原因bundle.js已經通過腳本被列入的index.html後請求對象不可用的index.html標籤。

非常感謝任何能夠闡明情況的人,謝謝。

+0

通常,捆綁包將包含整個應用程序。你是否將「requrest」捆綁在'index.html'中的其他腳本中?如果是這樣的話,答案很簡單。然而,你無法使用'fs'會讓你的問題難以理解 - 因爲它永遠不會工作。你能減少你想要做的簡單陳述嗎? – cartant

回答

1

當您創建一個browserify包時,它打算成爲應用程序的「入口點」。但似乎在這裏你已經在index.html中有了入口點,所以你想要捆綁一個獨立的庫。

Browserify有一個名爲--standalone做到這一點的一個選項,它產生一個UMD捆綁代替:https://github.com/substack/browserify-handbook#standalone

你調用它在幾乎相同的方式,但指定什麼名字(在全局命名空間)的UMD捆綁應該是給出。例如。

browserify foo.js --standalone mylib > bundle.js

現在,當你包括<script src="bundle.js"></script>在你的HTML,後續的腳本將能夠引用mylib對象。

下面是一個使用--standalone選項的示例:

另外,如果你想要的東西,像request,可以在瀏覽器中使用,https://www.npmjs.com/package/xhr具有非常類似的API。