node作为前台的项目如何打包静态js和css并生成版本号,loader插件的使用
一.使用场景:
1.node创建的前台项目需要输入地址展示页面
2.有设置缓存或者cdn的需要在静态文件更改时能使用新的而不是缓存的,需要版本号这里
3.可能需要压缩静态文件的
二.一些参考地址,需要安装的插件
1.loader ( https://github.com/JacksonTian/loader )(配合编译使用的)
2.loader-builder( https://github.com/JacksonTian/loader-builder )( 打包的)
3.完整的笔记地址,是x-mind的需要先安装如果要看的话(https://github.com/13476075014/node-vue/blob/master/mynodeproject/11.oldcode/各种笔记/x-mind%20笔记/node/loader.xmind)
需要先全局安装: npm install loader-builder -g
然后本地项目安装loader: npm install loader
三.使用步骤
1..在package.json里面加上一个打包的指令 loader,后面运行项目需要先运行这个指令打包后再启动项目
具体内容如下:
//在scripts下面加上loader的指令 ....... "scripts": {
"start": "set NODE_ENV=production && nodemon --inspect main.js",
"dev": "set NODE_ENV=development && nodemon --inspect main.js",
"makes": "mingw32-make",
"loader":"loader ./static/views/mobile ./" //这个指令,用loader-builder来打包我的mobile下面的view的ejs模板的文件 打包后在根目录生成一个assets.json的指向文件和和生成对应的js和css压缩打包的文件在指定的目录下
}, ....
2.在启动js里面加上loader和assetsMap的引用的挂在在全局变量上,我的是main,js上
具体代码如下:
// main.js
......
const Loader = require('loader') ;
.....
app.locals.Loader = Loader // 插件loader
app.locals.assetsMap = require('./assets.json') //运行指令后的指向文件
3.根据开发环境和生产环境来区分是否需要展示原静态文件还是压缩后的文件,生产环境展示压缩的
在main.js里面把参数挂在全局,后面页面使用loader的时候根据这个值是否是true来决定是否使用压缩文件,具体代码如下
//main.js let mydev = process.env.NODE_ENV.trim()
app.locals.myDebug = (mydev && mydev=='production') ? true : false //在loader中根据环境来决定是否要用压缩的静态文件
4.在某个引用了js和css的ejs页面使用loader
具体代码如下:
// index.ejs <!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
.......
// css的引用 myDebug是挂在node的全局渲染变量,这里决定是否使用压缩后的文件,cdn的配置见loader的github上的介绍
<%- Loader("/static/public/mobile/min/index.min.css")
.css("/static/public/mobile/css/orderDetails.css")
.css("/static/public/mobile/css/index.css")
.done(assetsMap,'',myDebug) %>
.......
//js的引用
<%- Loader("/static/public/mobile/min/apiUrlConfig.min.js")
.js("/static/public/mobile/js/apiUrlConfig.js")
.done(assetsMap,'',myDebug) %>
......
5.因为打包后的地址设置的static....这里要把这个地址设置成可访问的静态文件
在main.js中根据自己设置的打包后的地址来配置,具体代码如下(我的是用的/static/public/mobile/min/。。。这个地址,所以这里设置static的时候路由是这个文件夹)
app.use('/static', express.static(path.join(__dirname+'/static')));
6.执行命令打包和启动 :
npm run loader
(会生成assets.json里面的内容,和生成对应的js和css在指定的目录下)
7.到这里就可以直接启动项目了,可以设置开发环境和生产环境
node作为前台的项目如何打包静态js和css并生成版本号,loader插件的使用的更多相关文章
- vue打包后js和css、图片不显示,引用的字体找不到问题
vue打包后js和css.图片不显示,引用的字体找不到问题:图片一般都是背景图片. 一.vue打包出现js和css不显示问题: 1.不使用mode:'history' 2.使用mode:'histor ...
- webpack学习(六)打包压缩js和css
打包压缩js与css 由于webpack本身集成了UglifyJS插件(webpack.optimize.UglifyJsPlugin)来完成对JS与CSS的压缩混淆,无需引用额外的插件, 其命令we ...
- 【转】在ASP.NET MVC中,使用Bundle来打包压缩js和css
在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和css进行压缩(多个文件可以打包成一个文件),并且可以区分调试和非调试,在调试时不进行压缩,以原 ...
- 在ASP.NET MVC中,使用Bundle来打包压缩js和css(转)
转自:http://www.cnblogs.com/xwgli/p/3296809.html 在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和c ...
- ASP.NET MVC使用Bundle来打包压缩js和css
Bundle它是用来将js和css进行压缩(多个文件可以打包成一个文件),并且可以区分调试和非调试,在调试时不进行压缩,以原始方式显示出来,以方便查找问题. 1.BundleConfig配置Bundl ...
- 期货大赛项目|十,MVC对js和css的压缩
在Global.asax中添加两行代码 //默认在调试期间,不会启用js和css的压缩 //下面的语句确保了在调试期间也压缩css和js BundleTable.EnableOptimizations ...
- vue项目中打包编译后,CSS样式【-webkit-box-orient: vertical】打包后丢失问题
最近在做vue项目的时候页面处理多行文本样式时用到了-webkit-box-orient: vertical这个属性,本地跑项目没问题,但是打包放到服务器后发现这个属性丢失了.如下图: 后来在网上查了 ...
- 在ASP.NET MVC中,使用Bundle来打包压缩js和css
该总结参考博文地址:http://www.cnblogs.com/xwgli/p/3296809.html 1.首先了解Bundle的作用:Bundles用于打包CSS和javascript脚本文件, ...
- 在MVC中使用Bundle打包压缩js和css
第一步:安装 安装“System.Web.Optimization”:在中“NuGet”中搜索 安装. 第二步:配置 配置“Views”目录下的“web.config”文件增加“System.Web. ...
随机推荐
- docker_概念
为什么有docker? 1. 宿主机可以虚拟一个硬件平台:其上会有内核(在虚拟机上的操作系统),内核负责资源调度和通信:内核之上会有用户态,运行在用户态(用户空间)之上多是应用程序,也就是进程.硬件( ...
- 刷题记录:[XNUCA2019Qualifier]EasyPHP
目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...
- hdu4841 圆桌问题[STL vector]
目录 题目地址 题干 代码和解释 参考 题目地址 hdu4841 题干 代码和解释 解本题时使用了刚学的STL vector,注意hdu不支持万能头文件#include<bits/stdc++. ...
- 剑指offer:字符流中第一个不重复的字符
题目描述: 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读 ...
- 数据库sql优化总结之4--SQL优化总结
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...
- Python selenium PO By.XPATH定位元素报错
Python selenium PO By.XPATH定位元素报错 如下代码经常报错: # 首页的“新建投放计划”按钮 new_ads_plan = (By.XPATH, "//*[tex ...
- Windows10纯净原版系统安装方法
原文:https://baijiahao.baidu.com/s?id=1626696368732676440&wfr=spider&for=pc 1.先来下载一个纯净的ISO系统安装 ...
- 本地git工作流
一:add后的回退代码 1.在原有已经的基础上,又新增加了一个小需求 经过修改,添加到暂存区. 这个时候,会存在modified文件: 2.然后,又说需求不需要存在了 可以进行丢弃 在reset后,需 ...
- windows10 卓越性能模式
打开cmd,输入 powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61 再到电池选项里,勾选卓越性能模式 若没出现卓越性能,创建 ...
- git让线上代码强制覆盖本地的
git强制覆盖本地命令(分步执行): git fetch --all git reset --hard origin/master git pull git强制覆盖本地命令(单条执行): ...