在我的前端代码中,我使用require()了库,而库依赖于不同版本的Underscore.js.因此,当我使用browserify将所有内容捆绑在一起时,输出包含Underscore的多个副本.有没有办法告诉browserify require('underscore')应该始终导入特定文件?
作为问题的演示,假设我有以下依赖项:
// package.json
"dependencies": {
// Depends on underscore 1.7.0
"backbone": "^1.1.2",
// Depends on underscore 1.6.0
"backbone.marionette": "^2.3.0"
}
Run Code Online (Sandbox Code Playgroud)
在main.js我使用两个库:
// main.js
var Backbone = require('backbone');
var Marionette = require('backbone.marionette');
console.log("Hello, world!");
Run Code Online (Sandbox Code Playgroud)
当我创建一个包时,包含了多个版本的Underscore:
PS> browserify main.js -o out.js
PS> findstr _.VERSION out.js
_.VERSION = '1.7.0';
_.VERSION = '1.6.0';
Run Code Online (Sandbox Code Playgroud)
(我创建了一个带有更完整示例的GitHub存储库.克隆它并运行npm install && npm test以查看它的运行情况)
我尝试在下面添加一个browser部分package.json,但它似乎没有任何影响:
// package.json
"browser": {
"underscore": "./node_modules/underscore/underscore.js"
}
Run Code Online (Sandbox Code Playgroud)
我理解为什么要npm安装重复的依赖项(这对于服务器端代码这样做是有意义的)但是在使用browserify时处理这个问题的正确方法是什么?
小智 10
Browserify中存在重复检测,应避免多次加载相同版本.但是,如果您的node_modules树包含同一模块的多个副本,则此检测可能(应该?)失败.
我正在使用的解决方案是使用npm重复数据包结构:
npm dedupe
Run Code Online (Sandbox Code Playgroud)
这只会在依赖树中留下不可避免的欺骗行为,并会记录有关这些欺骗的警告,以便您可以仔细检查.
| 归档时间: |
|
| 查看次数: |
3063 次 |
| 最近记录: |