在Karma中设置NODE_ENV运行webpack的正确方法是什么?

我正在用Webpack构build我的项目,并使用Karma来运行testing。

我想configurationKarma来设置process.env.NODE_ENV来“testing”Webpack来执行testing环境的项目的条件构build,URL映射到localhost,而不是生产域名。

为此,我使用Webpack的env-replace-loader ,它根据process.env.NODE_ENV的值读取其configuration文件environments.json并设置variables,例如API_URL。 在生产版本中,我使用Gulp来设置process.env.NODE_ENV并启动webpack。 有用。

我想在testing版本中设置process.env.NODE_ENV = 'test' ,通过运行karma start karma.conf.js 。 目前我只是在karma.conf.jsprocess.env.NODE_ENV = "test"

有没有更好的方法来做到这一点?


另外,我尝试使用webpack.config.js中的webpack的webpack.config.js来设置这个variables:

 const webpackConfig = { ... plugins: [ new webpack.DefinePlugin({ process.env: {'NODE_ENV': 'test'} }), ... ], ... } 

它不会工作:webpack env-replace-loader诅咒Module build failed: TypeError: Cannot read property 'URL' of undefined – 我想,它不能访问它看不到的节点报告

在你的webpackconfiguration中,请改用这个JSON.stringify('name')。 尝试这样的事情:

  plugins: [ new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify('production'), APP_ENV: JSON.stringify('browser') }, }) ], 

这与webpack运行一个例子或类似的东西。 例如,我在运行示例时需要使用CSS,但在编译生产时会被忽略。

我得到了与Karmaconfiguration相同的问题,但是我修复了将该插件添加到Karmaconfiguration文件的webpack部分。 这是我的文件,例如:

 const webpack = require('webpack'); module.exports = function(config) { config.set({ browsers: ['PhantomJS'], files: [ 'tests.webpack.js', { pattern: 'src/**/__tests__/*.js', included: false, served: false, watched: true } ], frameworks: ['jasmine'], preprocessors: { 'tests.webpack.js': ['webpack', 'sourcemap', 'coverage'], }, reporters: ['progress', 'notification'], webpack: { devtool: 'inline-source-map', module: { loaders: [ { test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel-loader' } ] }, plugins: [ new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify('test') } }) ], watch: true }, webpackServer: { noInfo: true, } }); }; 

我希望对你也有帮助!