我如何使webpack跳过一个要求

3okqufwl  于 2022-11-13  发布在  Webpack
关注(0)|答案(7)|浏览(165)

我如何使webpack跳过

require('shelljs/global');

在我的源文件中?我想捆绑我的源文件,但保留文件中的require('shelljs/global'),而不捆绑shelljs/global

mi7gmzs6

mi7gmzs61#

如果你将路径存储在一个变量中,IgnorePlugin将无法工作。尽管你仍然可以:

const myCustomModule = eval('require')(myCustomPath)
zpgglvta

zpgglvta2#

您可以使用忽略插件(webpack 1)/Ignore plugin (webpack 2)
webpack.config.js中添加插件:

plugins: [
  new webpack.IgnorePlugin(/shelljs\/global/),
],
q1qsirdb

q1qsirdb3#

对于新来的人,在webpack2+上的做法是这样的:

module.exports = {
    entry: __dirname + '/src/app',
    output: {
        path: __dirname + '/dist',
        libraryTarget: 'umd'
    },
    externals: {
        'shelljs/globals': 'commonjs shelljs/global'
    }
};

该包将包含所需逐字记录:

require('shelljs/global');

我在webpack的配置指南和一些很好的例子上阅读更多支持的格式here

q35jwt9p

q35jwt9p4#

这应该是最后的选择,但如果你确定你的JS文件总是被Webpack解析,而不是其他:
您可以将require()呼叫替换为__non_webpack_require__()
Webpack将解析和转换任何出现的这个,并输出一个普通的require()调用。只有当你在NodeJS中执行或者在浏览器中有一个全局require库可供触发时,这个才会起作用。
如果webpack没有解析文件,并且脚本是由其他程序运行的,那么你的代码将尝试调用未转换的__non_webpack_require__,这将失败。你可以编写一些代码,在脚本的前面检查__non_webpack_require__是否作为函数存在,如果不存在,则让它将调用传递给require。
然而,这应该是暂时的,并且只是为了避免构建错误,直到您可以将其替换为类似Webpack自己的动态导入。

taor4pac

taor4pac5#

如果require位于全局名称空间中,并且这就是您希望Webpack忽略它的原因,则只需执行window.require()即可

mzmfm0qo

mzmfm0qo6#

这里有个窍门

const require = module[`require`].bind(module);

请注意模板字符串的使用

ijxebb2r

ijxebb2r7#

如果某些文件包含嵌套的requires,而您想忽略它们,您可以告诉webpack不要解析这些特定的文件。例如,如果 swiper.jsvue-quill-editor.js 有内部requires,这就是如何忽略它们。

module.exports = {
  module: {
    noParse: [
     /swiper.js/,/quill/
    ],

相关问题