angularjs - 如果(process.env.NODE_ENV === 'production')总是假

标签 angularjs node.js windows webpack

当尝试通过从 package.json 上的此脚本列表运行构建命令来构建 angular-webpack 应用程序时:

"scripts": {
    "test": "NODE_ENV=test karma start",
    "build":  "if exist dist rd /s /q dist && mkdir dist && set NODE_ENV=production && webpack && cp app/index.html dist/index.html",
    "start": "webpack-dev-server --content-base app"
  },

这是控制台上的结果:

$ npm run build

    > webpack-ng-egg@1.0.0 build M:\Learning webpack\egghead.io - AngularJS - Angula
    r and Webpack for Modular Applications\webpack-ng-egg
    > if exist dist rd /s /q dist && mkdir dist && set NODE_ENV='production' && webp
    ack && cp app/index.html dist/index.html

    process.env.NODE_ENV  : 'production'
    process.env.NODE_ENV === 'production' ????  : false
    Hash: c3136b0024cbd48ccb2e
    Version: webpack 1.13.2
    Time: 3185ms
        Asset     Size  Chunks             Chunk Names
    bundle.js  1.23 MB       0  [emitted]  main
        + 10 hidden modules

这是 webpack.config.js 文件的样子:

 var webpack = require('webpack');
    var path = require('path');
    var config = {
        context: path.resolve(__dirname, "app"),
        entry:'./app.js',
        output: {
            path : __dirname + '/app',
            filename:'bundle.js' // il ne sera pas généré dans le code, juste en mémoire
        },
        plugins:[
            new webpack.DefinePlugin({
                ON_TEST:process.env.NODE_ENV === 'test'
            })
        ],
        module:{
            loaders: [
            {
              test: /\.js$/,
              exclude: /(node_modules|bower_components)/,
              loader: 'babel', // 'babel-loader' is also a legal name to reference
              query: {
                presets: ['es2015']
              }
            },
             { test: /\.css$/,
               loader: "style-loader!css-loader",
               exclude: /(node_modules|bower_components)/
             },
            {
              test: /\.html$/,
              exclude: /(node_modules|bower_components)/,
              loader: 'raw', // 'babel-loader' is also a legal name to reference
            },
            {  test: /\.styl$/,
               loader: 'style-loader!css-loader!stylus-loader',
               exclude: /(node_modules|bower_components)/
             }
          ]
        },
        devServer:{
            //contentBase:path.join(__dirname, 'dist') // ceci est juste un exemple, si dist est l'endroit ou on aurait généré les fichiers
            inline:true, // les mises à jour de style ne sont plus affichés instantnément avec cette option donc j'ai ajouté le watch:true et çà marché!!!
            watch:true

        }
        /*resolve: {
            extensions: ['', '.js', '.jsx', '.css']
        },
        resolveLoader: {
            root: require('path').resolve(__dirname, "node_modules")
        }*/
    }

    console.log("process.env.NODE_ENV  : " + process.env.NODE_ENV);
    console.log("process.env.NODE_ENV === 'production' ????  : " + (process.env.NODE_ENV == 'production'));
    //config.output.path = path.resolve(__dirname, "dist");
    //console.log("config.output.path  : " + config.output.path);


    if(process.env.NODE_ENV === 'production') {
        console.log("this is the prod env!!!!!!!!!!");
        config.output.path = path.resolve(__dirname, "dist");
    }

    module.exports = config;

这里的问题是,在测试 (process.env.NODE_ENV === 'production') 时,它永远不会返回 true,即使它应该是(查看上面控制台上记录的内容) .我试图改变为简单的平等而不是严格的平等,但仍然总是错误。

最佳答案

我今天遇到了这个问题。

当我在 npm scripts 中使用 set NODE_ENV=production && something 时,NODE_ENV=production 变为 production + "" 后面有一个空格。

因此,我们将 productionproduction + "" 进行比较,这显然返回 false。

包.json

scripts: {
    "start": "set NODE_ENV=development && webpack --watch --progress",
    "test": "set NODE_ENV=production && webpack"
}

比较

console.log(process.env.NODE_ENV.trim() === "production"); //True if ran test else false
console.log(process.env.NODE_ENV === "production"); //False
console.log(process.env.NODE_ENV.trim() === "development"); //True if ran start else false
console.log(process.env.NODE_ENV === "development"); //False

webpack.config.js 的工作示例

const webpack = require("webpack");
const dev = process.env.NODE_ENV.trim() !== "production";

module.exports = {
    entry: "./index.js",
    output: {
        path: "./",
        filename: "parse.js"
    },
    module: {
        rules: [
            {
                test: /\.js/,
                use: "babel-loader",
                exclude: /node_modules/
            }
        ]
    },
    plugins: dev ? [] : [
        new webpack.optimize.UglifyJsPlugin()
    ],
    target: "node"
};

因此,使用 trim()

关于angularjs - 如果(process.env.NODE_ENV === 'production')总是假,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39529870/

相关文章:

java - 在控制面板中查找图标名称

Node.js 请求流管道重命名文件名

mysql - 如何在与sequ​​elize Node 的关系上使用having子句

javascript - 无法在 heroku 上使用 Node.js 执行多个名称字段 POST

angularjs - 使用 'addMockModule' 在一次测试中添加多个模拟模块

windows - Windows 上的 Qt DLL 部署

android - crosswalk 打包失败 *** ERROR : Building ABI 'armeabi-v7a' failed

angularjs - 在 AngularJS 中大写标题

javascript - 类型错误 : success is not a function

angularjs - 在页面加载时使用 AngularJS 将 json 绑定(bind)到 HTML 表