17

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

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));
    }
});

我在我的应用程序中遇到奇怪的错误,其中从我的编译文件加载的目录中加载了任意文本文件。我认为这是因为路径不再正确设置,并且因为 Browserify 将无法require()正确的文件像这样动态加载。

除了制作静态index.js文件之外,是否有一种首选的方法来动态要求与 Browserify 开箱即用的模块目录?

4

3 回答 3

21

这个插件允许 require 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)
于 2014-12-27T23:34:46.513 回答
2

Browserify 不支持动态要求 - 请参阅GH issue 377

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

于 2014-05-20T11:13:01.943 回答
2

还有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']);

我的 gulpfile 里面有这样的东西:

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'));
});
于 2015-05-30T19:22:29.137 回答