【问题标题】:Can browserify resolve require calls in methodsbrowserify 可以解决方法中的要求调用吗
【发布时间】:2025-12-03 04:50:02
【问题描述】:

我有

带有插件系统的包。每个插件都是一个包 可以通过调用use 方法加载插件并将插件导出作为参数传递:

package = require('thePackage').use( require('thePlugin'), require('anotherPlugin'));

我想要

如果use 的参数是字符串use 应该需要模块。

package = require('thePackage').use('thePlugin','anotherPlugin')

问题

browserify 可以解决require 的这种用法吗?

我不确定 browserify 是否只是在顶层查找 reqire 调用,或者是否实际评估代码。

【问题讨论】:

    标签: browserify


    【解决方案1】:

    Browserify 进程只 require() 使用文字调用,即 require('theplugin'); 它将包含可能需要的模块,例如:

    function use(moduleName) {
        require(moduleName);
    }
    use("someModule");
    

    你可以在代码中看到它,通过查看调用 node-detective 的module-deps(这是用于扫描模块的模块),by default returns only literals(字符串)用于 require() 调用。

    你仍然可以实现你想要的,并在你的插件函数中使用带有参数的 require(),但是你必须更明确地包含在你的浏览器包中的内容。如果 Browserify 看不到文字要求,它将不会遍历这些插件模块,因此您需要手动 --require 它们。 例如browserify --require ./src/plugins/plugin.js

    模块加载解析(即 require() 的参数)在 node.js 和浏览器化环境下可能不一样,所以如果你在 use() 函数中做一些聪明的模块名称解析,请小心。

    【讨论】:

      最近更新 更多