从gulp注入环境变量到webpack

时间:2015-10-21 04:54:53

标签: node.js gulp webpack

我有一个gulpfile,我可以从中启动webpack捆绑。 webpack配置定义了使用process.env.NODE_ENV的别名,如下所示

.
.
resolve: {
    modulesDirectories: ["node_modules", "js", "jsx"],
    extensions: ["", ".js", ".jsx"],
    alias: {
        config: path.join(__dirname, ('config.' + process.env.NODE_ENV + '.js'))
    }
}..

在gulpfile中,我有两个按顺序执行的任务

  1. set-env使用gulp-env设置环境变量,如下所示

    gulpEnv({
        vars: {
            NODE_ENV: 'dev'
        }
    });
    
  2. webpack任务取决于上一个任务,仅在第一个任务完成时执行

  3. 这里变量似乎没有得到正确的注入。文件名将解析为config.undefined.js。我正在做的事情有什么问题吗?

1 个答案:

答案 0 :(得分:1)

我改变了我的做法

<强>的WebPack

var NODE_ENV = process.env.NODE_ENV;

var config = {
    .
    .
    resolve: {
        modulesDirectories: ["node_modules", "js", "jsx"],
        extensions: ["", ".js", ".jsx"],
        alias: {
            //<envt> will be injected by gulp
            config: config: path.join(__dirname, ('config.<envt>.js'))
        }
    }
    .
    .
    .
}

//If webpack is directly invoked with NODE_ENV, replacement will happen here
if (NODE_ENV) {
    config['resolve']['alias']['config'] = config['resolve']['alias']['config'].replace(/<envt>/, NODE_ENV);
}

module.exports = config;

<强>咕嘟咕嘟

  1. set-env内,而不是使用gulp-env进行设置,我只需设置一个全局变量NODE_ENV='dev'
  2. webpack内部,我正在webpackConfig['resolve']['alias']['config'] = webpackConfig['resolve']['alias']['config'].replace(/<envt>/, NODE_ENV);
  3. 这对我有用