Node.js压缩web项目中的js,css和图片

  • 安装node.js

    这个非常简单,下载下来,配置下环境变量就可以了,使用node -v查看是否安装成功

  • 安装压缩需要的模块分别是uglify-js,clean-css,node-smushit

    • 命令是npm install xxx ,我之前安装都是不适于全局安装的,这个应该无所谓

  • 编写压缩的js(应该很好看懂)

    • /*******压缩JS******/
      var fs = require(‘fs‘);
      var uglify = require("../../nodejs/node_modules/uglify-js");
      function jsMinifier(fileIn, fileOut) {
          if (fileIn.length > 0) {
              fs.writeFileSync(fileOut, uglify.minify(fileIn).code, ‘utf8‘);
          }
      }
      //批量的话写多个一起执行即可
      var baseCompressArray = [‘../js/jquery/jquery-1.9.1.js‘, ‘../js/jquery-extend/jq-string.js‘,
          ‘../js/jquery-extend/jquery.browser.js‘, ‘../js/jquery-extend/jq-excel.js‘,
          ‘../js/jquery-extend/jq-form.js‘, ‘../js/jquery-extend/jq-query.js‘,
          ‘../js/jquery-extend/jq-validate.js‘, ‘../js/jquery-extend/jq-project.js‘,
          ‘../js/jquery-extend/jq-formatter.js‘,
          ‘../js/jquery-extend/jq-dialog.js‘, ‘../js/jquery-extend/jquery.cookie.js‘,
          ‘../js/easyui/jquery.easyui.min.js‘, ‘../js/jquery-extend/jq-tree.js‘,
          ‘../js/layer/layer.js‘,
          ‘../js/easyui/locale/easyui-lang-zh_CN.js‘,
          ‘../js/easyui-extend/jquery.easyui.datagrid.extend.js‘];
      jsMinifier(baseCompressArray, ‘../js/all-in-one.min.js‘);
      jsMinifier(‘../js/project/staff/staffEdit.js‘, ‘../js/project/staff/staffEdit.min.js‘);
      jsMinifier(‘../js/project/staff/staffEdit_baseInfo.js‘, ‘../js/project/staff/staffEdit_baseInfo.min.js‘);
      /*******压缩CSS******/
      var cleanCSS = require(‘../../nodejs/node_modules/clean-css‘);
      /**
       keepSpecialComments - * for keeping all (default), 1 for keeping first one only, 0 for removing all
       keepBreaks - whether to keep line breaks (default is false)
       benchmark - turns on benchmarking mode measuring time spent on cleaning up (run npm run bench to see example)
       root - path to resolve absolute @import rules and rebase relative URLs
       relativeTo - path with which to resolve relative @import rules and URLs
       processImport - whether to process @import rules
       noRebase - whether to skip URLs rebasing
       noAdvanced - set to true to disable advanced optimizations - selector & property merging, reduction, etc.
       compatibility - Force compatibility mode to ie7 or ie8. Defaults to not set.
       debug - set to true to get minification statistics under stats property (see test/custom-test.js for examples)
       */
      function cssMinifier(fileIn, fileOut) {
          var origCode = ‘‘, finalCode = [];
          for (var i = 0; i < fileIn.length; i++) {
              origCode = fs.readFileSync(fileIn[i], ‘utf8‘);
              finalCode.push(new cleanCSS({keepSpecialComments: 0}).minify(origCode));
          }
          fs.writeFileSync(fileOut, finalCode.join(""), ‘utf8‘);
      }
      
      cssMinifier([‘../css/easyui/black/easyui.css‘], ‘../css/easyui/black/easyui.min.css‘);
      cssMinifier([‘../css/easyui/bootstrap/easyui.css‘], ‘../css/easyui/bootstrap/easyui.min.css‘);
      cssMinifier([‘../css/easyui/default/easyui.css‘], ‘../css/easyui/default/easyui.min.css‘);
      cssMinifier([‘../css/easyui/gray/easyui.css‘], ‘../css/easyui/gray/easyui.min.css‘);
      cssMinifier([‘../css/easyui/metro/easyui.css‘], ‘../css/easyui/metro/easyui.min.css‘);
      cssMinifier([‘../css/easyui/metro-blue/easyui.css‘], ‘../css/easyui/metro-blue/easyui.min.css‘);
      cssMinifier([‘../css/easyui/metro-gray/easyui.css‘], ‘../css/easyui/metro-gray/easyui.min.css‘);
      cssMinifier([‘../css/easyui/metro-green/easyui.css‘], ‘../css/easyui/metro-green/easyui.min.css‘);
      cssMinifier([‘../css/easyui/metro-orange/easyui.css‘], ‘../css/easyui/metro-orange/easyui.min.css‘);
      cssMinifier([‘../css/easyui/metro-red/easyui.css‘], ‘../css/easyui/metro-red/easyui.min.css‘);
      cssMinifier([‘../css/easyui/ui-cupertino/easyui.css‘], ‘../css/easyui/ui-cupertino/easyui.min.css‘);
      cssMinifier([‘../css/easyui/ui-dark-hive/easyui.css‘], ‘../css/easyui/ui-dark-hive/easyui.min.css‘);
      cssMinifier([‘../css/easyui/ui-pepper-grinder/easyui.css‘], ‘../css/easyui/ui-pepper-grinder/easyui.min.css‘);
      cssMinifier([‘../css/easyui/ui-sunny/easyui.css‘], ‘../css/easyui/ui-sunny/easyui.min.css‘);
      cssMinifier([‘../css/easyui/icon.css‘, ‘../css/project/project_style.css‘], ‘../css/easyui/style.min.css‘);
      /*******压缩图片******/
      //var imgMinifier = require(‘../../nodejs/node_modules/node-smushit‘);
      //imgMinifier.smushit(‘../images‘, {recursive: true}); //递归
      //imgMinifier.smushit(‘./file-src/images‘);
  • 执行压缩

    • node compress.js 可以手动执行压缩

    也可以写入到批处理命令,打包的时候执行下

    @echo off
    echo ***********************************
    echo 开始压缩静态资源文件
    cd %~dp0
    cd ../src/main/webapp/static/compressor
    node compress.js
    echo 结束压缩静态资源文件
    echo ***********************************
    cd %~dp0
    cd ..
    echo ***********************************
    echo 开始打包......
    call mvn clean package -Dmaven.test.skip=true
    if ERRORLEVEL 1 GOTO processError
    cd bin
    echo 打包完成......
    echo ***********************************
    pause
    exit
    
    :processMavenRepeaseError
    echo 未正确安装maven-release-manager插件,请更新maven插件后重试!
    pause
    exit
    
    :processError
    echo 发布失败......
    pause
    exit

    jsp的处理,我的实现很简单就是所有的jsp页面引入一个taglib.jsp,内容为

    <%@ page language="java" pageEncoding="UTF-8" trimDirectiveWhitespaces="true"
             import="com.sys.common.entity.search.SearchOperator,
                     com.sys.common.entity.domain.BaseEntityDomain,
                     org.joda.time.DateTime" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <script type="text/javascript">var App = {
        ctx: "${pageContext.request.contextPath}",
        sid: "${pageContext.session.id}"
    }</script>
    <c:set var="ctx" value="${pageContext.request.contextPath}"/>
    <c:set var="cssDebug" value="true"/>
    <c:set var="jsDebug" value="true"/>
    <%
        if (pageContext.getAttribute("jsDebug") == null
                || "false".equals(pageContext.getAttribute("jsDebug").toString())) {
    %><c:set var="suffix" value=".min"/><%}%>

    js_lib.jsp,css_lib.jsp加入debug参数判断

    <%if(pageContext.getAttribute("jsDebug")!=null && "true".equals(pageContext.getAttribute("jsDebug").toString())){%>
    <!-- base -->
    <script type="text/javascript" src="${ctx}/static/js/jquery/jquery-1.9.1.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/jquery-extend/jq-string.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/jquery-extend/jquery.browser.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/jquery-extend/jq-form.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/jquery-extend/jq-query.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/jquery-extend/jq-excel.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/jquery-extend/jq-validate.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/jquery-extend/jq-project.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/jquery-extend/jq-dialog.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/jquery-extend/jq-formatter.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/jquery-extend/jquery.cookie.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/easyui/jquery.easyui.min.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/easyui-extend/jquery.easyui.datagrid.extend.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/jquery-extend/jq-tree.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/easyui/locale/easyui-lang-zh_CN.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/layer/layer.js"></script>
    <script type="text/javascript">
    layer.config({
        extend: ‘extend/layer.ext.js‘
    });  
    </script>
    <%}else{%>
    <script type="text/javascript" src="${ctx}/static/js/all-in-one.min.js"></script>
    <script type="text/javascript" src="${ctx}/static/js/layer/layer.js"></script>
    <script type="text/javascript">
    layer.config({
        extend: ‘extend/layer.ext.js‘
    });  
    </script>
    <%}%>
    <%
       if (pageContext.getAttribute("cssDebug") != null
             && "true".equals(pageContext.getAttribute("cssDebug")
                   .toString())) {
    %>
    <link rel="stylesheet" type="text/css"
       href="${ctx}/static/css/easyui/<%=UserInfo.getCurrentUser().getTheme()%>/easyui.css"
       id="easyuiTheme">
    <link rel="stylesheet" type="text/css"
       href="${ctx}/static/css/easyui/icon.css">
    <link rel="stylesheet" type="text/css"
       href="${ctx}/static/css/project/project_style.css">
    <%
       } else {
    %>
    <link rel="stylesheet" type="text/css"
       href="${ctx}/static/css/easyui/<%=UserInfo.getCurrentUser().getTheme()%>/easyui.min.css"
       id="easyuiTheme">
    <link rel="stylesheet" type="text/css"
       href="${ctx}/static/css/easyui/style.min.css">
    <%}%>

    然后再引入的js的地方加入suffix参数

    <script type="text/javascript" src="${ctx}/static/js/project/staff/staffEdit${suffix}.js"></script>

    发布的时候,利用maven-war插件将taglib的debug设置为false

    项目代码懒得改了。

时间: 2024-10-10 23:30:44

Node.js压缩web项目中的js,css和图片的相关文章

向MyEclipse中的web项目中导入js文件时,出现小红叉

这个问题困扰我很久.刚开始时,也没有重视,因此也没有在网上寻找解决方法.最近做项目时再一次出现了这样的问题,于是决定还是找找办法.在此,分享一下自己的解决方法,给正处于痛苦中的童鞋们带来解药.具体方法如下: 首先右击js文件->MyEclipse->Exclude from Validation.(其实此时小红叉就已经消失了) 然后再右击js文件->MyEclipse->run Validation. Ok,就这么easy.希望给小伙伴们能带来一些帮助.

MyEclipse和Eclipse 编译错误 web项目中的 js,jsp报错 更改

搜索   validation   语法检测 必须 选定一个  不然不编译 原文地址:https://www.cnblogs.com/wzj1992/p/9991813.html

将Ext JS 5应用程序导入Web项目中

将Ext JS 5应用程序导入Web项目中 相关资料: http://docs.sencha.com/extjs/5.1/getting_started/welcome_to_extjs.html 效果图: 工程目录结构图:   准备资料: 先到官网上下载ext-5.1.0-gpl.zip然后解压,官网上的我看到buy我就没敢下载了,嘻嘻也可以到csdn上去找http://cdn.sencha.com/ext/gpl/ext-5.1.0-gpl.zip,本来想传上去的,可是说70m太大了不让传,

Chart.js在Laravel项目中的应用

本文为转载,原文:Chart.js在Laravel项目中的应用 介绍 Chart.js是一个HTML5图表库,使用canvas元素来展示各式各样的客户端图表,支持折线图.柱形图.雷达图.饼图.环形图等, 本文将介绍如何在laravel项目中使用chart.js 安装 可以通过以下命令在 npm 或 bower 中来安装chart.js. npm install chart.js --save bower install chart.js --save 可以在你的项目中使用 CDN link. h

在Web项目中使用MEAN堆栈的7大理由

Web开发的过程中会涉及各种技术的应用,其中比较突出的是Web服务器.库.前端框架和数据库系统.如今,开发人员使用工具和技术的结合来更加方便和快捷地进行web开发.例如,LAMP,Linux(操作系统).Apache(Web服务器).MySQL(数据库管理系统)和PHP.Perl或Python(服务器端脚本语言).同样,在Web开发中一个新的技术堆栈也越来越受到开发人员的欢迎,而MEAN就是这样一个堆栈! MEAN是MongoDB.Express.AngularJS 和 Node.js的首字母缩

web 项目中a标签传值(中文)到后台的乱码问题

web 项目中a标签传值(中文)到后台的乱码问题 jsp页面中的a标签: .............. <c:forEach items="${sellerList }" var="seller" > <tr class="data-tr"> <td>${seller.order_number }</td> <td>${seller.name }</td> <td>

在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式,虽然Web API或者WCF方式的调用,相对直接连接数据库方式,响应效率上略差一些,不过扩展性强,也可以调动更多的设备接入,包括移动应用接入,网站接入,Winfrom客户端接入,这样可以使得服务逻辑相对独立,负责提供接口即可.这种方式中最有代表性的就是当前Web API的广泛应用,促进了各个接入端

web项目中nicedit富文本编辑器的使用

一.为什么要用富文本编辑器? 先说什么是富文本编辑器吧,普通的html中input或textarea标签只能进行简单的输入,而做不到其他的文本调整功能,甚至 连空格与回车都要另写工具类去识别,更谈不上字体大小和颜色的修改.整体排版都功能了.其实一般读入文段类型的输入框都需 要富文本编辑器,没错,你们平时写博客用的就是富文本编辑器.如果还是无法理解富文本与普通输入框的区别,请看下图:  二.为什么要选nicedit 同类富文本编辑器有很多,这里选nicedit来说并不是因为它有多好,反而它功能并不

java、JSP web项目中的路径问题

java web项目中的路径,有相对路径和绝对路径 什么是相对路径呢    举个简单例子 我们有项目   test     发布后地址  http://localhost:8080/test/ 页面  qiantai/login.jsp        页面中链接  <a href="index.jsp" /> JSP页面相相对寻址     链接的最终地址是    http://localhost:8080/Test/qiantai/index.jsp 相对路径是这么一个过程