使用Browserify编译dynamic需要的模块

我正在使用Browserify将大型Node.js应用程序编译成单个文件(使用选项--bare--ignore-missing [以避免Express中的lib-cov出现问题])。 我有一些代码来dynamic加载模块基于目录中的可用内容:

 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文本文件正在从编译的文件加载目录中加载我认为这是因为path不再设置正确,并且因为Browserify将无法require()的正确的文件是这样dynamic加载的。

在制作静态index.js文件的时候,是否有一个首选的方法来dynamic地要求与Browserify兼容的模块目录?

这个插件允许需要Glob模式: require-globify

然后,通过一些小技巧,你可以在编译时添加所有的文件,而不是执行它们:

 // Hack to compile Glob files. Don´t call this function! function ಠ_ಠ() { require('views/**/*.js', { glob: true }) } 

而且,例如,您可以在需要时执行特定的文件:D

 var homePage = require('views/'+currentView) 

Browserify不支持dynamic需求 – 请参阅GH问题377 。

dynamic需要目录的唯一方法我知道:构build步骤列出目录文件并写入“静态”index.js文件。

还有一些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')); });