如果您使用的webpack> =
4,则可以设置
mode为
production。这将自动定义
NODE_ENV为,
production而无需使用define插件。https://webpack.js.org/concepts/mode/#mode-
production。
似乎webpack已将
-p标记更新为自动定义
process.env.NODE_ENV为
production捆绑代码中的标记(感谢@
x-yuri指出这一点)。因此,尽管现在不再需要下面的答案,但我将其保留在那里以供参考,并作为webpack定义插件如何工作的解释。原始答案+说明
TLDR :使用webpack define插件设置
process.env.NODE_ENV为正式版。
长版:
React,Redux和许多其他JS库包括额外的验证和错误日志记录,使开发变得更加容易。但是,您显然不希望在生产环境中使用此功能,因为它们会使您的代码库更大,更慢。这些检查通常包裹在如下语句中:
if (process.env.NODE_ENV !== 'production') { // do development checks}
您收到的错误是Redux告诉您,尽管您已缩小代码,
process.env.NODE_ENV但未设置为
production,因此开发检查仍在进行中。要解决此问题,您将需要使用webpack
define插件设置
process.env.NODE_ENV为正式版。
var webpack = require('webpack');module.exports = { entry: [ './src/index.js' ], output: { path: __dirname, publicPath: '/', filename: 'bundle.js' }, module: { loaders: [{ exclude: /node_modules/, loader: 'babel', query: { presets: ['react', 'es2015', 'stage-1'] } }] }, resolve: { extensions: ['', '.js', '.jsx'] }, devServer: { historyApiFallback: true, contentbase: './' }, plugins: [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV) }), ]};
请注意,我在
process.env.NODE_ENV运行webpack时将为您定义的值定义为。因此,要生成生产包,您将需要运行
NODE_ENV=productionwebpack -p,而不仅仅是运行
webpack-p。这将替换的任何实例
process.env.NODE_ENV与
production你的包。因此,我上面显示的支票现在看起来像这样:
if ('production' !== 'production') { // do development checks}
缩小器足够聪明,可以检测到if语句中的代码永远不会发生,并将其从生产包中删除。因此,您将两全其美:更好的开发体验,并且生产包中没有多余的代码:)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)