NPM的反应不能在客户端上使用,因为未定义"开发".该包是从Webpack生成的

And*_*ena 7 javascript node.js npm reactjs webpack

我正在创建一个React Node.js应用程序,我正在尝试生成一个包含从NPM加载的React源代码的Webpack包.

但是,似乎NPM的React代码不能直接在客户端中使用.它会触发此错误:

Uncaught ReferenceError: development is not defined
Run Code Online (Sandbox Code Playgroud)

触发异常的代码来自React代码:

样品

有什么我可以做的工作吗?

编辑

这是我的webpack.config.js:

import _ from 'lodash';
import webpack from 'webpack';
import yargs from 'yargs';
import ExtractTextPlugin from 'extract-text-webpack-plugin';

export default {
    entry: {
        bundle: './src/client.js'
    },

    output: {
        filename: '[name].js',
        path: './dist/assets',
        publicPath: '/assets/'
    },

    externals: undefined,

    resolve: {
        extensions: ['', '.js', '.json']
    },

    module: {
        loaders: [
            {test: /\.js/, loader: 'babel?optional=es7.objectRestSpread!client', exclude: /node_modules/ },
            {test: /\.css/, loader: ExtractTextPlugin.extract("style-loader", "css-loader")},
            {test: /\.less$/, loader:  ExtractTextPlugin.extract("style-loader", "css-loader!less-loader")},
            {test: /\.json$/, loader: 'json'},
            {test: /\.jpe?g$|\.gif$|\.png$/, loader: 'file?name=[name].[ext]'},
            {test: /\.eot$|\.ttf$|\.svg$|\.woff2?$/, loader: 'file?name=[name].[ext]'}
        ]
    },

    plugins: [
        new webpack.DefinePlugin({
            'process.env': {
                'NODE_ENV': 'development'
            },
            'development': true
        }),
        new ExtractTextPlugin('[name].css')
    ]
};
Run Code Online (Sandbox Code Playgroud)

我的client.js文件只包含这一行(为了调试此问题):

import React from 'react';
Run Code Online (Sandbox Code Playgroud)

这是最终的捆绑

Mic*_*ley 19

传递给webpack.DefinePlugin字符串的任何值都被视为代码片段 - 也就是说,使用

new webpack.DefinePlugin({
  ENV: "development"
});
Run Code Online (Sandbox Code Playgroud)

与代码

console.log(ENV);
Run Code Online (Sandbox Code Playgroud)

结果是

console.log(development);
Run Code Online (Sandbox Code Playgroud)

相反,你想要

new webpack.DefinePlugin({
  ENV: "\"development\""
});
Run Code Online (Sandbox Code Playgroud)

这将导致

console.log("development");
Run Code Online (Sandbox Code Playgroud)

要解决您的问题,请将插件更改为

plugins: [
    new webpack.DefinePlugin({
        'process.env': {
            'NODE_ENV': "'development'"
        }
    }),
    new ExtractTextPlugin('[name].css')
]
Run Code Online (Sandbox Code Playgroud)

我通常允许webpack读取,process.env.NODE_ENV以便在运行webpack时React正确缩小NODE_ENV=production:

new webpack.DefinePlugin({
  "process.env": { NODE_ENV: JSON.stringify(process.env.NODE_ENV || "development") }
})
Run Code Online (Sandbox Code Playgroud)