在 Webpack 中需要保留部分 require 该怎么办

新手上路,请多包涵

我们在写前端的时候使用 Webpack 打包,然后因为项目需要使用了一个巨大的组件,这个组件内部是通过 require 来动态请求脚本的(不然一次性加载完得发疯)。其中有一部分使用 require 的脚本大概是这样的:

require([
    "something/module1",
    "something/module2"
], function(m1, m2) {
    ...
}

我们之前的前端脚本是通过 Webpack 打包成了单一文件,在引入这一段之后,这一段也被 Webpack 分析出来加载文件进行打包……

现在的需求是,希望 Webpack 能保留这部分 require(....) 语句,不把它模块化,也不翻译成 __webpack_require,这样在脚本发布后可以通过全局的 require 动态加载这些脚本——就这么个需求,找不到实现的方式,仔细研究了 IgnorePluginContextReplacementPlugin 似乎都解决不了问题,不知道该怎么办了,求解……

阅读 6.4k
3 个回答

我自己想了个办法,把 require 改成了 _require,然后在 Webpack 里把 _require 定义成全局的 require,貌似解决了:

// 部分 webpack 配置
{
    ......,
    externals: {
        jquery: "jQuery",
        _require: "require"
    },
    plugins: [
        new webpack.ProvidePlugin({
            $: "jquery",
            _require: "_require"
        })
    ],
    ......
}

代码里是这样的

_require([
    "something/module1",
    "something/module2"
], function(m1, m2) {
    ...
}

一开始本来想用 dojo.require 来代替的,发现 dojo.requirerequire 还不一样,dojo.require 貌似没有回调……

虽然过去几年了,但是我给一个另外的方法,在某些环境下可用 (nwjs/Electron)
_require = eval("require")

// xxx = _require("xxx")

虽然过去这么久了但这里还是提供一个方法,直接用__non_webpack_require__就行了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题