Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webpack 网页包尝试要求可能缺少的模块_Webpack - Fatal编程技术网

Webpack 网页包尝试要求可能缺少的模块

Webpack 网页包尝试要求可能缺少的模块,webpack,Webpack,我想尝试在网页包构建中要求一个模块,如果找不到该文件,就什么也不做,不要抛出错误等 我试着这样做: try { const local = require('./config-local.js'); extend(config, local); } catch (err) { // do nothing here } 基本上,我想做的是,如果找到一个本地配置文件,就用本地配置扩展一个配置对象,但如果找不到,就不要用任何东西扩展它 Webpack抛出一个模块丢失的错误,即使requi

我想尝试
在网页包构建中要求
一个模块,如果找不到该文件,就什么也不做,不要抛出错误等

我试着这样做:

try {
  const local = require('./config-local.js');
  extend(config, local);
} catch (err) {
  // do nothing here
}
基本上,我想做的是,如果找到一个本地配置文件,就用本地配置扩展一个配置对象,但如果找不到,就不要用任何东西扩展它

Webpack抛出一个模块丢失的错误,即使require被包装在try/catch子句中


如何告诉webpack忽略它?

我认为稍微不同的方法可能会给你想要的结果。您提到所讨论的文件是applicationconfig;我会在
webpack.config.js
中处理这个问题,而不是在应用程序代码中。在那里,您的
require
将遵循普通的nodeJS规则,而不是web包的静态分析。您可以尝试/捕获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)
]

Webpack尝试将您的每个需求捆绑到输出文件中。它进行静态分析,找到需求并尝试读取它。您的try&catch仅在运行时有效

您所需要做的就是将此需求“标记”为特殊需求


您可以使用webpack的特殊要求来完成此操作:

基于@trysis comment,我在我的项目中完成了此操作:

const REQUIRE_TERMINATOR='';
试一试{
const local=require(`./config local.js${require_TERMINATOR}`);
扩展(配置,本地);
}捕捉(错误){
//在这里什么也不做
}

这将为WebPack提供足够的信息,以包含所有以
config local.js
开头的文件(这正是您想要的文件),但也会使其混淆,以至于它不会尝试提前验证文件的存在,因此,您的try/catch块将在运行时触发。

这是在nodejs或客户端代码中?Webpack将每个需求视为一个资源,如果不在那里,它将失败。你不能只保留一个带有空对象或其他东西的文件吗?有问题,因为我想忽略此文件:/所以每个开发人员都必须将其添加到自己的工作区中。我在我的项目中是如何做到这一点的,我有一个grunt任务,它在webpack之前运行,webpack负责创建配置文件(从远程配置管理服务器下载)。你找到过这个问题的答案吗?我想听一个活动可能有用,但我不确定是哪一个,这似乎有点过分。