我试图使用browserify将我的角度js打包成一个脚本。当我在主文件require
中使用app.js
时,它很有效,但当app.js
中所需的其中一个模块包含它自己的require
时,依赖关系不包含在我的包中。
回顾一下,app.js
(link to line in repo):
require("splash-header");
// more code here
require("social-button-directive");
// more code here
socialButtons.js没有依赖关系。
browserify --list app.js
未按预期列出splashHeader.js
,并且通过browserify app.js -o bundle.js
生成的捆绑包不包含socialButton的javascript。因此,当然如果我尝试加载网站,我会在splashHeader的Uncaught Error: Cannot find module 'social-button-directive'
获得require('social-button-directive')
。
同样重要的是要注意我使用"浏览器"将模块名称映射到文件位置。 package.json
中的选项,并使用browerify-shim,因为我的模块都不兼容common-js。
package.json的相关部分:
"dependencies": {
"browserify": "~9.0.3",
"browserify-shim": "~3.8.3"
},
"browserify": {
"transform": [
"browserify-shim"
]
},
"browserify-shim": {
"splash-header": {
"depends": "angular",
"exports": "angular.module('splash-header').name"
},
"social-button-directive": {
"depends": "angular",
"exports": "angular.module('social-button-directive').name"
}
},
"browser":{
"splash-header": "./ng-modules/splashHeader/splashHeader.js",
"social-button-directive": "./ng-modules/socialButtons/socialButtons.js"
}
我整个上午一直在这,并且完全被难过了。我已将有问题的项目裁减为a minimal example of the issue。要测试一下只需克隆和npm安装。如果您正在详细查看,请访问working/not working version diff。
我尝试通过相对路径(require('./ng-modules/socialButtons/socialButtons.js
)`)加载子模块,没有运气。也许我把事情弄错了?我对此的处理来自this article。
编辑:这肯定是我的browserify-shim配置。将模块转换为commonjs并从package.json中删除browserfy-shim选项后,一切正常。我想我只需写下这一切就可以把它固定下来。 = /