我花了很多时间用 grunt 文件构建一个 web 模板(前端)来“编译”整个项目并在生产中拥有高效的代码。
现在我正在开发一个后端项目(使用 Node/express),我想知道“编译” Node 项目是否有意义?
我在 Babel 中使用 ES6 语法,所以我想象每次启动项目(node index.js 或 nodemon index.js)Babel 都会在 ES5 中转译它,然后运行它。
我不在乎它是否在项目开始时完成,一旦启动就没有影响。但我不确定。
Node 是否读取整个程序并将其“保存”到内存中?如果是这样,我想像我们习惯的前端那样连接/编译 javascript 文件是没有用的。
最佳答案
是的,至少这不是一个坏主意。
但是:
nodemon
不适用于生产- 当您将
babel
作为运行时运行时,您会将其作为可能出现故障的附加层引入到代码之上。 - 对于较旧的
node
平台,仅从转译的 js 中读取可能会更容易,或者当您将其作为模块使用时,效率会更高。
更好:
- 使用 NODE_ENV=product
- 是的,它确实将其保存到 RAM 中。解析速度会更快,但速度有限。
- 事实上,当你缩小代码时,你的 js 的编译时间会更好。但副作用(例如,可调试性较差)是一种权衡。
- OH:V8 可以针对不超过特定
char
计数的函数进行性能优化。但效果可能非常低,因为只有真正的热门功能才能从中受益。 - 如果您需要发布代码,编译和丑化将有助于混淆。
npm Shrinkwrap
也是一个很好的工具。
Concluding: Don't do it, since it rather feels like premature optimization, which is generally a bad idea. You will meet heavy problems of node debugability, which will be a problem at dev-time.
Rather follow general Node.js performance guide, and if you don't target other platforms than your production environment, choose the newest Node.js version with all the ES6 features you need.
关于node.js - 使用 grunt 或 gulp 对 "compile" Node 项目有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33362387/