我有一个 gulpfile,我在其中创建一个 webpackDevServer 来实时更新我的 js 代码。我在 gulpfile 中设置了一个 process.env.NODE_ENV 变量,但由于某种原因 webpack 没有看到它 - 它是未定义的。
这是我的 gulpfile.js
的相关部分:
gulp.task("watch", ["_set-env:dev"], function() {
// modify default webpack configuration for Development Server
var webpackDevConfig = Object.create(webpackConfig);
webpackDevConfig.devtool = "eval";
webpackDevConfig.debug = "true";
new webpackDevServer(webpack(webpackDevConfig), {
proxy: {
"/api/*": {target: "http://localhost:8000", secure: false},
"/static/*": {target: "http://localhost:8000", secure: false},
"/media/*": {target: "http://localhost:8000", secure: false}
}
}).listen(8001, "localhost", function (err) {
if (err) throw new gutil.PluginError("webpack-dev-server", err);
gutil.log("[webpack-dev-server]", "http://localhost:8001" + webpackDevConfig.output.publicPath);
});
});
gulp.task("_set-env:dev", function() {
gutil.log("set-env", "ENV => development");
genv({
vars: {
NODE_ENV: "development"
}
});
});
然后在 webpack 中我检查它的值,它是未定义的:
const webpack = require("webpack");
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const ExtractTextPlugin = require("extract-text-webpack-plugin");
...
const environmentsFile = path.join(__dirname, "/environments.json");
const nodeModulesPath = path.join(__dirname, "/node_modules");
const bowerComponentsPath = path.join(__dirname, "/bower_components");
console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
console.log(process.env.NODE_ENV);
const webpackConfig = {
entry: {
app: ["app.js"]
},
在控制台上我看到:
$ gulp watch
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
undefined
[22:28:34] Using gulpfile ~/Documents/frontend/gulpfile.js
[22:28:34] Starting '_set-env:dev'...
[22:28:34] set-env ENV => development
[22:28:34] Finished '_set-env:dev' after 7.63 ms
[22:28:34] Starting 'watch'...
最佳答案
您的 gulpfile 顶部可能有类似的内容:
var webpackConfig = require('./webpack.config.js');
这意味着您的 webpack 配置在 _set-env:dev
任务运行之前评估。请记住:您的 gulpfile 仅定义任务。直到评估整个 gulpfile 后,任务本身才会运行。
您需要推迟对 webpack 配置的要求,直到 _set-env:dev
任务运行之后,删除 gulpfile 顶部的行并将 require()
直接放入 watch
任务中:
gulp.task("watch", ["_set-env:dev"], function() {
// modify default webpack configuration for Development Server
var webpackDevConfig = Object.create(require('./webpack.config.js'));
关于node.js - 如何将 process.env.NODE_ENV 从 Gulp 传递到 Webpack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39882186/