如何在NodeJS / Express / Jade中正确使用dev和prod资源

我有一个基于Express的结构和Jade模块的NodeJS应用程序的意见。 我需要在开发人员机器上使用完整版本的资产,在生产机器上使用最小版本。

你能解释一下我应该怎么做的最佳做法吗?

编辑:如果你把一个减号请描述的原因。

不知道为什么没有这样做的“官方”方式(与Ruby on Rails相比)。

这里有几点build议:

DIY

这是我迄今为止所做的:

在服务器启动时,我在所有的js文件(在… / js下运行uglify-js,并且用…这样的方式创buildminified版本)(忽略文件的读写):

var jsp = require('uglify-js').parser; var pro = require('uglify-js').uglify; var ast = jsp.parse(code.toString('utf8')); // parse code and get the initial AST ast = pro.ast_mangle(ast); // get a new AST with mangled names ast = pro.ast_squeeze(ast); // get an AST with compression optimizations var final_code = pro.gen_code(ast); // compressed code here 

然后在html模板中,基于某些环境variables来触发生产环境,我为<script>标记生成path,指向… / js或… / min。

这留下了很多(你可以将所有的js文件分组到一个最小化的,以减less浏览器查询的数量等),但希望这可以帮助你制定自己的战略。

堆垛机

这就是说,我一直在尝试使用piler( https://github.com/epeli/piler ),这似乎是一个更好的替代DYI的方式。

使用Grunt

Grunt.js( http://gruntjs.com/ )也非常适合帮助预处理文件(html,js,css,…)

这里有几点提示:

  • grunt-recess: https : //github.com/sindresorhus/grunt-recess (特别有趣,如果你使用较less)
  • 如何configurationgrunt.js来分别缩小文件
  • Grunt任务来处理HTML文件并生成优化文件的部署目录( https://gist.github.com/necolas/3024891

我认为minification是构build步骤,并且不希望在运行时使应用程序负担。 因此,我会设置我的HTML文件来引用从构build工具生成的文件path,然后使用构build工具来确定是否要缩小。

我实际上并不需要自己制定条件,因为我不需要在浏览器中使用未分类的代码。 使用grunt安装程序来观察源文件并自动重新编译,我可以编辑JavaScript源文件,并自动重build并放置到适当的运行时位置。 不过,我可以看到这对于单步执行代码非常有用。 IE 9在其开发控制台中有一个格式化程序,这对于debugging缩小的代码很有用,但是我不确定跨浏览器有多普遍。

如果我在开发过程中忽略缩小,我会首先检查是否可以使用一个像环境variables或npm设置等configuration设置来让grunt uglify任务决定是否实际uglify。 如果这是不可能的,我会做一个单独的grunt任务,称为“devBuild”,除uglify以外的任何事情。