[英]process.env.NODE_ENV returns undefined in webpack 4, server-side
在服务器代码中,我有这个:
import express from "express";
const server = express();
import path from "path";
// const expressStaticGzip = require("express-static-gzip");
import expressStaticGzip from "express-static-gzip";
import webpack from "webpack";
import webpackHotServerMiddleware from "webpack-hot-server-middleware";
import configDevClient from "../../config/webpack.dev-client";
import configDevServer from "../../config/webpack.dev-server.js";
import configProdClient from "../../config/webpack.prod-client.js";
import configProdServer from "../../config/webpack.prod-server.js";
const isProd = process.env.NODE_ENV === "production";
const isDev = !isProd;
const PORT = process.env.PORT || 8000;
let isBuilt = false;
const done = () => {
!isBuilt &&
server.listen(PORT, () => {
isBuilt = true;
console.log(
`Server listening on http://localhost:${PORT} in ${process.env.NODE_ENV}`
);
});
};
if (isDev) {
const compiler = webpack([configDevClient, configDevServer]);
const clientCompiler = compiler.compilers[0];
const serverCompiler = compiler.compilers[1];
const webpackDevMiddleware = require("webpack-dev-middleware")(
compiler,
configDevClient.devServer
);
const webpackHotMiddlware = require("webpack-hot-middleware")(
clientCompiler,
configDevClient.devServer
);
server.use(webpackDevMiddleware);
server.use(webpackHotMiddlware);
console.log("process.env.NODE_ENV",process.env.NODE_ENV);//RETURNS UNDEFINED
server.use(webpackHotServerMiddleware(compiler));
console.log("Middleware enabled");
done();
} else {
webpack([configProdClient, configProdServer]).run((err, stats) => {
const clientStats = stats.toJson().children[0];
const render = require("../../build/prod-server-bundle.js").default;
server.use(
expressStaticGzip("dist", {
enableBrotli: true
})
);
server.use(render({ clientStats }));
done();
});
}
我启用了此插件的客户端和服务器配置文件:
new webpack.DefinePlugin({
"process.env": {
NODE_ENV: JSON.stringify("development"),
WEBPACK: true
}
但这是输出
process.env.NODE_ENV undefined
Server listening on http://localhost:8000 in undefined
在客户端它正在工作,但表达端 process.env.NODE_ENV 返回未定义
假设你使用 Webpack-Dev-Server,你可以使用这个调用语法是正确的:
const dev = Boolean( process.env.WEBPACK_DEV_SERVER )
您将不再需要传递环境类型参数,因为我认为您在 package.json 中运行的脚本中传递参数
我正在写我的经验来帮助任何人解决这个问题,尽管我并没有真正解决它。 我在服务器端项目中设置环境变量时遇到了同样的问题。
显然,在您设置环境变量后,它们在构建过程中是完全可以访问的,这在构建工具中,如webpack config
甚至.babelrc.js
。
但是在构建过程之后,环境变量被覆盖,并且构建过程和覆盖环境变量之间存在时间间隔。
我使用了许多webpack or babel plugins
但在服务器端的构建过程之后,它们都无法保留环境变量,但它们立即在客户端定义。 由于我使用的是ReactJs
,我尝试将REACT_APP_添加到变量的开头,但仍然没有运气。
我使用的其他一些插件: webpack dotenv
、 webpack.DefinePlugin
、 webpack.EnvironmentPlugin
、 babel-plugin-transform-define
、 babel-plugin-transform-inline-environment-variables
所以它让我使用了在 DEPLOY 上而不是在 BUILD 过程中设置environment.js
旧时尚方式。
以防有人不熟悉:您有一个主要environment.js
和(在我的情况下)2 个其他文件,一个用于staging
environment.staging.js
,另一个用于production
environment.prod.js
。 在每次部署时,您将相关的js
复制到environment.js
(主环境文件),并且在您的代码中,您始终读取global CONSTs
、 baseUrl for APIs
global CONSTs
和 ...来自environment.js
。
希望它可以帮助那里的人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.