Chr*_*ian 10 javascript css production minify node.js
我有一个在节点中运行的Web应用程序.所有(客户端)Javascript/CSS文件目前都没有缩小,以便于调试.
当我投入生产时,我想缩小这些脚本.有这样的东西会很高兴:
node app.js -production
如何在不更改html文件中的脚本标记的情况下提供我的脚本的缩小版本?应该有类似的东西:如果我正在制作中,请使用这两个缩小(组合)的脚本,否则使用我所有未经编辑的脚本.
这可能吗?也许我觉得太复杂了?
Gol*_*den 19
您可能对Piler感兴趣.它是一个Node.js模块,它在调试模式下提供您通常指定的所有JavaScript(和CSS)文件,但在生产模式下连接和缩小.
作为一项特殊功能,您可以通过Socket.io实时强制CSS更新以显示在您的浏览器中(在Piler中称为"CSS Live Updated"),这非常棒:-).
诀窍在于模板内部只有for script和link元素的占位符,Piler在运行时渲染这些元素 - 在调试模式下作为单个元素,在生产模式下作为动态生成的单个元素.
这样您就可以忘记手动创建资产的连接和缩小版本,或者使用构建工具,它只是在运行时,但在开发和调试时总是有完整的分离版本.
您可以为静态文件使用 2 个单独的位置
这是一些快速代码:
if (process.env.MODE === "production") {
app.use(express['static'](__dirname + '/min'));
} else {
app.use(express['static'](__dirname + '/normal'));
}
Run Code Online (Sandbox Code Playgroud)
并开始节点
MODE=production node app.js
Run Code Online (Sandbox Code Playgroud)
此外,如果您不想复制所有文件,您可以利用 express static router 在第一个文件处停止的事实,并执行以下操作:
if (process.env.MODE === "production") {
app.use(express['static'](__dirname + '/min')); // if minized version exists, serves it
}
app.use(express['static'](__dirname + '/normal')); // fallback to regular files
Run Code Online (Sandbox Code Playgroud)
但是,对于最小化与否使用相同的名称会导致浏览器缓存出现问题。