这篇文章有点长,但我需要通过代码示例来说明我的困惑。接下来我想了解以下问题的答案:
- 如何使用
require('module')
而不是require('../../src/module')
或require('./module')
? - 如何在
spec/specs.js
中重用./index.js
而不重复工作?(同时防止src/app.js
运行,因为它是一个入口模块)。
我已经开始了几个基于浏览器的项目,并喜欢使用browserify和grunt。但每个项目都在开发/学习曲线的同一点死掉。当我将测试添加到混合中并且必须管理两个browserify捆绑包(app.js
和 spec/specs.js
)时,整个系统就崩溃了。我会解释:
我使用grunt-browserify并设置了初始目录:
.
├── Gruntfile.js
├── index.js (generated via grunt-browserify) [1]
├── lib
│ ├── jquery
│ │ └── jquery.js [2]
│ └── jquery-ui
│ └── jquery-ui.js [3]
├── spec
│ ├── specs.js (generated via grunt-browserify) [4]
│ └── src
│ ├── spec_helper.js (entry)
│ └── module_spec.js (entry)
└── src
├── app.js (entry)
└── module.js
- 使用一个入口文件 (
src/app.js
) 并进行代码遍历以捆绑所有 所需的 模块。 - 使用 browserify-shim 别名
jquery
。 - 只是别名为
jquery-ui
而没有 shim (当你var $ = require('jquery')
后需要)。 - 使用
spec/src
中的所有辅助和规范文件作为入口模块。
我会逐步介绍我的配置:
browserify: {
dist: {
files: {
'index.js': ['src/app.js']
}
}
}
// in app.js
var MyModule = require('./module'); // <-- relative path required?!
开心
现在添加jQuery:
browserify: {
options: {
shim: {
jquery: {
path: 'lib/jquery/jquery.js',
exports: '$'
}
},
noParse: ['lib/**/*.js'],
alias: [
'lib/jquery-ui/jquery-ui.js:jquery-ui'
]
},
dist: {
files: {
'index.js': ['src/app.js']
}
}
}
// in app.js
var $ = require('jquery');
require('jquery-ui');
var MyModule = require('./module');
开心
现在加上规格:
options: {
shim: {
jquery: {
path: 'lib/jquery/jquery.js',
exports: '$'
}
},
noParse: ['lib/**/*.js'],
alias: [
'lib/jquery-ui/jquery-ui.js:jquery-ui'
]
},
dist: {
files: {
'app.js': 'src/app.js'
}
},
spec: {
files: {
'spec/specs.js': ['spec/src/**/*helper.js', 'spec/src/**/*spec.js']
}
}
// in app.js
var $ = require('jquery');
require('jquery-ui');
var MyModule = require('./module');
// in spec/src/module_spec.js
describe("MyModule", function() {
var MyModule = require('../../src/module'); // <-- This looks like butt!!!
});
悲伤
总结一下:我如何...
- 使用
require('module')
而不是require('../../src/module')
或require('./module')
? - 在
spec/specs.js
中重用./index.js
,避免重复工作?(同时防止src/app.js
作为入口模块运行)。
paths
时遇到问题吗?我一直看到“找不到模块”的消息,已经回退到了 8.0.1。 - Cory