Javascript 使用Browserify v2的全局请求

Javascript 使用Browserify v2的全局请求,javascript,module,browserify,Javascript,Module,Browserify,我想使用Browserify绑定我的文件,但是我需要在HTML页面本身上的Browserify bundledbundle.js中包含一个模块。由于页面上未定义require功能,因此当前无法执行此操作 看来bundle.js中由browserify定义的require函数在IIFE中,所以我不能使用它。是否可以将此选项替换为全局要求 <script src="bundle.js"></script> <script> // Require the `ap

我想使用Browserify绑定我的文件,但是我需要在HTML页面本身上的Browserify bundled
bundle.js
中包含一个模块。由于页面上未定义
require
功能,因此当前无法执行此操作

看来
bundle.js
中由browserify定义的
require
函数在IIFE中,所以我不能使用它。是否可以将此选项替换为全局
要求

<script src="bundle.js"></script>
<script>
  // Require the `app` module inside of `bundle.js`
  var app = require('app');
  app.start();
</script>

//需要bundle.js中的'app'模块`
var-app=require('app');
app.start();
我之所以需要这样做,是因为我的
app.start
函数需要传递一些JSON,这些JSON只能由服务器端模板呈现


注意:我正在使用Browserify v2。

您可以使用
-r
为您指定的文件运行:

x、 js:

控制台

$ browserify -r ./x.js > bundle.js
然后在html中:

<script src="bundle.js"></script>
<script>
    var x = require('./x.js');
    console.log(x(3))
</script>

var x=要求('./x.js');
控制台日志(x(3))
将打印
333


在您的情况下,只需执行
browserify-r app
即可将
require('app')
公开给外部上下文。

谢谢。奇怪的是,如果你传递一个相对的URL,比如
x.js
,而不是
/x.js
,那么它会与
TypeError一起出错:不是字符串或缓冲区
,你必须传递路径,因为模块解析发生在绑定时。v2中的客户端捆绑包中不再有模块解决方案算法。我希望将require方法附加到构建模块返回的全局,从而实现封装。类似于
bundle.require('./x.js')
。我所做的是在主文件中创建需求清单。有更好的方法吗?我很担心全局
要求
,因为我正在编写的软件是要嵌入到其他网站上的。
require
的不同实现可能会在至少一些站点上定义。browserify文档说明browserify将退回到以前定义的任何require函数,因此只要路径不冲突,它可能不会干扰其他函数。
<script src="bundle.js"></script>
<script>
    var x = require('./x.js');
    console.log(x(3))
</script>