17

Browserify を使用して、大きな Node.js アプリケーションを 1 つのファイルにコンパイルしています (オプション--bareと[ Express での--ignore-missingトラブルを回避するため] を使用)。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));
    }
});

コンパイル済みファイルがロードされているディレクトリから任意のテキスト ファイルがロードされているアプリケーションで、奇妙なエラーが発生します。これは、パスが正しく設定されていないためであり、Browserify がrequire()正しいファイルにアクセスできないためだと思います。このように動的にロードされます。

静的index.jsファイルを作成する以外に、すぐに使用できる Browserify と互換性のあるモジュールのディレクトリを動的に要求する好ましい方法はありますか?

4

3 に答える 3

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 に答える
2

Browserify は動的な requires をサポートしていません - GH issue 377を参照してください。

私が認識しているディレクトリを動的に要求する唯一の方法は、ディレクトリ ファイルを一覧表示し、「静的な」index.js ファイルを作成するビルド ステップです。

于 2014-05-20T11:13:01.943 に答える