【问题标题】:Compiling dynamically required modules with Browserify使用 Browserify 编译动态需要的模块
【发布时间】:2014-02-08 05:34:43
【问题描述】:

我正在使用 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));
    }
});

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

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

【问题讨论】:

    标签: javascript node.js browserify


    【解决方案1】:

    这个插件允许需要 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)
    

    【讨论】:

    • Muahhhahha,欺骗静态分析器相信你正在使用它们——经典:D
    • 为什么, require("app/" + module) 仅在我将它放在 require("app/*.js") 所在的同一文件中时才有效?需要的JS在编译好的JS里面,能找到但是不能访问...
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的来信。我最终按照您的建议创建了一个静态包含文件。目前,无论如何我只有大约 15 件东西。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 2014-07-22
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多