webpack - 工兵 webpack 警告:“模式”选项尚未设置
问题描述
我不是 webpack 冠军,当我使用“npx export sapper”时,我有这个警告
WARNING in configuration
The 'mode' option has not been set, webpack will fallback to 'production' for this value. Set 'mode' option to 'development' or 'production' to enable defaults for each environment.
You can also set it to 'none' to disable any default behavior. Learn more: https://webpack.js.org/configuration/mode/
我尝试根据文档更改配置,但没有任何反应(或者当我尝试使用 CLI 时出现错误...
我应该改变什么来切换到开发模式而不是默认的生产模式?非常感谢。
这是 webpack 配置文件:
const webpack = require("webpack");
const path = require("path");
const config = require("sapper/config/webpack.js");
const pkg = require("./package.json");
// const mode = process.env.NODE_ENV; <- Original line
const mode = "development"; // <- my attempt
const dev = mode === "production";
const alias = { svelte: path.resolve("node_modules", "svelte") };
const extensions = [".mjs", ".js", ".json", ".svelte", ".html"];
const mainFields = ["svelte", "module", "browser", "main"];
module.exports = {
client: {
entry: config.client.entry(),
output: config.client.output(),
resolve: { alias, extensions, mainFields },
module: {
rules: [
{
test: /\.(svelte|html)$/,
use: {
loader: "svelte-loader",
options: {
dev,
hydratable: true,
hotReload: false, // pending https://github.com/sveltejs/svelte/issues/2377
},
},
},
],
},
mode,
plugins: [
// pending https://github.com/sveltejs/svelte/issues/2377
// dev && new webpack.HotModuleReplacementPlugin(),
new webpack.DefinePlugin({
"process.browser": true,
"process.env.NODE_ENV": JSON.stringify(mode),
}),
].filter(Boolean),
devtool: dev && "inline-source-map",
},
server: {
entry: config.server.entry(),
output: config.server.output(),
target: "node",
resolve: { alias, extensions, mainFields },
externals: Object.keys(pkg.dependencies).concat("encoding"),
module: {
rules: [
{
test: /\.(svelte|html)$/,
use: {
loader: "svelte-loader",
options: {
css: false,
generate: "ssr",
dev,
},
},
},
],
},
mode: process.env.NODE_ENV,
performance: {
hints: false, // it doesn't matter if server.js is large
},
},
serviceworker: {
entry: config.serviceworker.entry(),
output: config.serviceworker.output(),
mode: process.env.NODE_ENV,
},
};
解决方案
简短的回答
在webpack.config.js
中,更改所有出现的mode: process.env.NODE_ENV,
for mode,
。然后设置const mode = 'development'
为你正在做的。
长答案
发生这种情况是因为mode
客户端、服务器和服务工作者的配置不一致。它mode: mode
适用于客户端,但mode: process.env.NODE_ENV
适用于服务器和服务人员。Webpack 抱怨mode
未设置,因为process.env.NODE_ENV
未定义。
可选的
您还可以将export
脚本修改package.json
为类似
"export": "NODE_ENV='development' sapper export"
然后运行npm run export
。
推荐阅读
- gradle - 为什么 Gradle 不使用插件 pom.xml 中声明的 Maven 存储库?
- sql - SQL计算百分比
- java - 春季动态特征标志
- r - 带有省略号的PCA,R中没有颜色
- ssl - IBM WAS 7.5 SSLException SSLSocketFactory 为空
- mysql - MySQL 优化:单个查询中的多种模式(最常见的值)
- python - NoReverseMatch at /cart/ 未找到带有参数 '('',)' 的“cart_add”的反向。尝试了 1 种模式:['cart/add/(?P
[0-9]+)/$'] - r - 如何在 R 中导入 Excel 表以获取二进制变量?
- java - 使用 MapR MultipleOutputs 写入 OrcNewOutputFormat 时出错
- symfony - 替换继承另一个服务的参数