这有点长,但我需要代码示例来说明我的困惑。这之后,我很感兴趣的答案如下:如何在多个grunt-browserify软件包中管理相对路径别名?
- 我如何使用
require('module')
代替require('../../src/module')
或require('./module')
? - 如何重复使用
./index.js
spec/specs.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
没有垫片(需要你后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')
? - 重用
./index.js
inspec/specs.js
没有重复的工作? (并防止src/app.js
由于它是入口模块而运行)。
'spec/index.js'与'spec/specs,js'是一个错字。编辑的问题。谢谢你的回答。似乎真相是原始的(旧版本)没有被设计来做这个设置。我认为更好的问题是*应该如何组织这样的项目?许多教程不捆绑生产脚本和测试脚本。添加testem之类的东西,难怪人们会感到困惑。我们需要一个元指南,将所有这些软件包和谐地整合在一起。 – Sukima
根本问题可能是JS生态系统的多样性。它还很年轻。也许有一天重复的软件包/实用程序将停止共存,其中一个将成为解决X事务的默认资源。现在,谈到JS时,至少有2/3不同的库在做同样的事情。所以对于像构建系统这样的东西来说,特别难以完全不可知,并且对于所有可能的库组合来说都很好。 –
这是'aliasMappings'选项特定于'grunt-browserify'还是它是一个'browserify'隐藏选项的包装?我试图用['opts.basedir'](https://github.com/substack/node-browserify#var-b--browserifyfiles-or-opts)选项获得相同的行为,但没有运气。 – eightyfive