我正在使用Browserify将一个大型的Node.js应用程序编译成一个单独的文件(使用选项--bare
和--ignore-missing
来避免在Express中使用lib-cov
的麻烦)。我有一些代码可以根据目录中的内容动态加载模块:
var fs = require('fs'),
path = require('path');
fs.readdirSync(__dirname).forEach(function (file) {
if (file !== 'index.js' && fs.statSync(path.join(__dirname, file)).isFile()) {
module.exports[file.substring(0, file.length-3)] = require(path.join(__dirname, file));
}
});
我在我的应用程序中收到奇怪的错误,从我编译的文件加载的目录中加载了aribtrary文本文件。我认为这是因为路径不再正确设置,并且因为Browserify将无法require()
像这样动态加载的正确文件。
除了创建一个静态的index.js
文件之外,有没有一种更好的方法来动态地要求一个与Browserify兼容的开箱即用的模块目录?
发布于 2014-12-28 07:34:47
这个插件允许需要全局模式:require-globify
然后,通过一些小技巧,您可以在编译时添加所有文件,而不是执行它们:
// Hack to compile Glob files. Don´t call this function!
function ಠ_ಠ() {
require('views/**/*.js', { glob: true })
}
例如,您可以在需要的时候请求并执行特定的文件:D
var homePage = require('views/'+currentView)
发布于 2014-05-20 19:13:02
Browserify不支持动态请求-请参阅GH issue 377。
我所知道的动态请求目录的唯一方法是:列出目录文件并写入“静态”index.js文件的构建步骤。
发布于 2015-05-31 03:22:29
还有bulkify
转换,如下所示:
https://github.com/chrisdavies/tech-thoughts/blob/master/browserify-include-directory.md
基本上,你可以在你的app.js
或者其他什么东西中做到这一点:
var bulk = require('bulk-require');
// Require all of the scripts in the controllers directory
bulk(__dirname, ['controllers/**/*.js']);
我的接收文件中有这样的内容:
gulp.task('js', function () {
return gulp.src('./src/js/init.js')
.pipe(browserify({
transform: ['bulkify']
}))
.pipe(rename('app.js'))
.pipe(uglify())
.pipe(gulp.dest('./dest/js'));
});
https://stackoverflow.com/questions/21642398
复制相似问题