在包含bundle.js脚本之后,无法从index.html引用Browserify模块

时间:2017-01-03 19:56:04

标签: javascript html node.js browserify

我正在使用Browserify从index.html文件(托管在Google App Engine上)访问Node模块

我在“main.js”文件中导入模块,因为我看到它是Browserify文档中的标准,如下所示:

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

然后我使用以下命令将其捆绑到bundle.js文件中:

browserify main.js -o 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)

如果我尝试将request()调用移动到index.html中的脚本中,我会遇到同样的问题,但是如果我将该行移到main.js中,我就不会再遇到这个问题了。

我认为这归结为对Javascript的个人误解,但我似乎无法弄清楚为什么在index.html中通过脚本标记将index.js包含在index.html中之后,index.html中没有可用的请求对象

非常感谢任何能够对情况有所了解的人,谢谢。

1 个答案:

答案 0 :(得分:1)

创建browserify捆绑包时,它应该是应用程序&#34;入口点&#34;。但似乎在这里你有index.html的入口点,所以你想要的是捆绑一个独立的库。

Browserify有一个名为--standalone的选项来执行此操作,它会生成一个UMD包:https://github.com/substack/browserify-handbook#standalone

您以相同的方式调用它,但指定应该给出UMD包的名称(在全局命名空间中)。例如

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

现在,当您在html中包含<script src="bundle.js"></script>时,后续脚本将能够引用mylib对象。

以下是使用--standalone选项的示例:

此外,如果您希望在浏览器中使用request之类的内容,则https://www.npmjs.com/package/xhr具有非常相似的API。