React和Grunt - Envify NODE_ENV ='production'和UglifyJS

Fer*_*gre 8 javascript node.js browserify gruntjs reactjs

我正在使用Grunt构建一个React项目,我想要'dev'和'prod'的味道.正如反应文档所说:

要在生产模式下使用React,请将环境变量NODE_ENV设置为production.建议使用UglifyJS执行死代码消除的minifier,以完全删除开发模式中存在的额外代码.

我是非常新的使用grunt,browserify和东西,但让我们看看.我遇到的第一个问题是envify,我用它作为变换:

browserify: {
  options: {
    transform: ['reactify'],
    extensions: ['.jsx']
  },
  dev:{
    options: {
      watch: true //Uses watchify (faster)
    },
    src: ['js/app.js'],
    dest: 'js/bundle.js'
  },
  /**
   * To use React in production mode, set the environment variable NODE_ENV to production.
   * A minifier that performs dead-code elimination such as UglifyJS is
   * recommended to completely remove the extra code present in development mode.
   **/
  prod: {
    options: {
     transform: ['envify'] //How to set up NOD_ENV='production' ?
    },
    src: ['js/app.js'],
    dest: 'js/bundle.js'
  }
},
Run Code Online (Sandbox Code Playgroud)

好吧,做咕噜:开发工作得很好.所以当运行grunt:prod ...我怎样才能设置NODE_ENV:'生产'?我的意思是,我知道我正在通过'envify'作为变换但是...不知道如何使用它.

在此之后,我还有一个uglify任务:

uglify: {
 prod: {
   files: {
     'js/bundle.min.js': ['js/bundle.js']
   }
 }
}
Run Code Online (Sandbox Code Playgroud)

所以在调用grunt:prod后,它创建的是两个文件(bundle.jsbundle-min.js).在制作中我想只有bundle.min.js.我知道我能做到:

js/bundle.js':['js/bundle.js']

但是mmm我不知道是否有办法将它重命名为bundle.min.js,我想是这样的...问题是在html中我有:

<script src="js/bundle.js"></script>
Run Code Online (Sandbox Code Playgroud)

这里还有一个技巧让它接受bundle.js或bundle.min.js吗?

提前致谢.

Bri*_*and 18

转换是本地的,并且制作精良的包将它们的转换放在它们的package.json文件中.除非您在自己的代码中使用envify,否则您无需对其执行任何操作.

你需要的是grunt-env,或者设置环境变量的另一种方法.

这是使用package.json的替代方法:

{
  "scripts": {
    "build": "NODE_ENV=development grunt build-dev",
    "dist": "NODE_ENV=production grunt dist"
  }
},
"devDependencies": {
  "grunt": "...",
  "grunt-cli": "..."
}
Run Code Online (Sandbox Code Playgroud)

这样做的好处是使用您的包的人甚至不需要全局安装grunt. npm run build./node_modules/.bin/grunt build-dev使用正确的环境变量集运行.


vul*_*tyy 8

John Reilly和FakeRainBrigand的答案都不适合我.对我有用的是:

步骤1 - 运行package.json所在的命令

npm i grunt-env --save-dev
Run Code Online (Sandbox Code Playgroud)

第2步 - 将"evn:"中的代码添加到grunt.initConfig中的Gruntfile.js,如下所示:

grunt.initConfig({

...

env: {
    prod: {
        NODE_ENV: 'production'
    }
},

...

});
Run Code Online (Sandbox Code Playgroud)

第3步 - 将grunt任务添加到Gruntfile.js

grunt.loadNpmTasks('grunt-env');
Run Code Online (Sandbox Code Playgroud)

第4步 - 在浏览器之前调用它,如下所示:

grunt.registerTask("default", ["env", "browserify"]);
Run Code Online (Sandbox Code Playgroud)