webpack尝试要求可能缺少的模块

kam*_*lkp 12 webpack

我想尝试require在webpack构建中的模块,如果找不到该文件,则不做任何事情,不要抛出错误等.

我试过这样做:

try {
  const local = require('./config-local.js');
  extend(config, local);
} catch (err) {
  // do nothing here
}
Run Code Online (Sandbox Code Playgroud)

基本上我想要做的是使用本地配置扩展配置对象(如果找到该文件但是不仅仅是不扩展它).

即使需要包含在try/catch子句中,Webpack也会抛出一个模块丢失的错误.

如何告诉webpack忽略它?

Bre*_*non -1

我认为稍微不同的方法可能会给你想要的结果。您提到有问题的文件是应用程序配置;webpack.config.js我会在而不是在应用程序代码中处理这个问题。在那里你require将遵循普通的nodeJS规则而不是webpack的静态分析。您可以尝试/捕获 require 语句并找到应用程序将使用的结果配置,然后使用DefinePlugin. IMO 使用DefinePlugin(使用静态文件或环境变量中的数据)这样是将配置注入到 webpack 构建的应用程序中的更常见模式。

// load config data
const defaultConfig = require("default-config.json");
let localConfig = {};
try {
  localConfig = require("config-that-may-not-exist.json");
} catch (err) {}

const actualConfig = Object.assign(defaultConfig, localConfig);

// ...later, in plugins part of config:
plugins: [
  new webpack.DefinePlugin(actualConfig)
]
Run Code Online (Sandbox Code Playgroud)