【发布时间】:2015-03-29 23:05:31
【问题描述】:
对于使用 reactjs 和纯 javascript 的项目,在 grunt 中配置 browserify 插件的最佳方法是什么? IE。假设我想在我的项目中的每个 js 文件中使用 require(...) 并且目录结构如下所示:
/js/model/foo.js (plain javascript)
/js/model/... (plain javascript)
/js/services/foo-service.js (plain javascript)
/js/view/foo-item-view.jsx (reactjs)
/js/view/... (reactjs)
/js/main.js (plain javascript, entry point)
etc.
我想对 /js/view/... 目录中的所有文件应用 reactjs 转换,然后使用 browserify 转换所有内容。我没有找到干净的方法来做到这一点。
有可能吗?
更新:
好吧,我想我的问题有点不清楚。我知道这绝对是可行的,这就是我现在正在做的事情(对我来说这看起来像是一个黑客):
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
watch: {
scripts: {
files: ['web/js/**/*.js', 'web/html/index.html'],
tasks: ['copy', 'react', 'browserify']
}
},
copy: {
main: {
files: [
{
src: 'web/html/index.html',
dest: 'target/web/index.html'
},
{
cwd: 'web/js', // source js dir
src: ['**', '!**/*.jsx'], // copy all files and subfolders to the temporary dor, except for jsx
dest: 'target/web/tmp/js', // destination folder, used by browserify
expand: true // required when using cwd
}
]
}
},
react: {
dynamic_mappings: {
files: [
{
expand: true,
cwd: 'web/js/view',
src: ['**/*.jsx'],
dest: 'target/web/tmp/js/view',
ext: '.js'
}
]
}
},
browserify: {
dist: {
files: {
'target/web/js/app.js': ['target/web/tmp/js/main.js'],
}
}
}
});
这对我来说看起来并不优雅,因为在 browserify 任务中需要额外的副本而不是“反应”源。可能是我遗漏了什么,这个解决方案可以简化吗?
【问题讨论】:
标签: javascript gruntjs reactjs browserify