我正在使用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中没有可用的请求对象
非常感谢任何能够对情况有所了解的人,谢谢。
答案 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。