• grunt 自定义任务实现js文件的混淆及加密


     1 //自定义任务
     2 module.exports = function (grunt) {
     3     // 项目配置
     4     var http = require('http');
     5     var qs = require('querystring');
     6     var fs=require("fs");
     7 
     8     function write(name,temp){
     9         fs.writeFile("./release/"+name,temp,"utf8",function(err){
    10             if(err){
    11                 grunt.log.error('BODY: ' + err);
    12             }
    13         });
    14     }
    15 
    16     grunt.initConfig({
    17         minJs:{
    18             version:"0.9.7",
    19             rootPath:"./online/",
    20             resource:[{src:"RongIMClient.js",nameList:"RongIMClient.min.js,RongIMClient-0.9.7.min.js",operate:"pack"},
    21                 {src:"emoji-0.9.2.js",nameList:"RongIMClient.Emoji-0.9.2.min.js",operate:"pack"},
    22                 {src:"protobuf.js",nameList:"protobuf.min.js",operate:"uglify"},
    23                 {src:"swfobject.js",nameList:"swfobject.min.js",operate:"uglify"},
    24                 {src:"voice-0.9.1.js",nameList:"RongIMClient.voice-0.9.1.min.js",operate:"pack"},
    25                 {src:"xhrpolling.js",nameList:"xhrpolling.min.js",operate:"uglify"}],
    26             env:"Release"
    27         }
    28     });
    29     grunt.registerTask('minJs', '自定义压缩js文件', function () {
    30 
    31         this.async();
    32 
    33         grunt.log.writeln('Processing task...');
    34 
    35 
    36         var options = {
    37             hostname: 'tool.lu',
    38             port: 80,
    39             path: '/js/ajax.html',
    40             method: 'POST',
    41             headers: {
    42                 'Content-Type': 'application/x-www-form-urlencoded'
    43             }
    44         };
    45         grunt.config("minJs.resource").forEach(function(x){
    46             fs.readFile(grunt.config("minJs.rootPath")+ x.src,"utf8",function(err,data){
    47                 if(err){
    48                     grunt.log.error(err);
    49                     return;
    50                 }
    51                 if(grunt.config("minJs.env")==="Release"){
    52                     data=data.replace(/["navUrl-Debug"]/g,"["navUrl-Release"]");
    53                 }
    54                 var post_data = {
    55                     code: data,
    56                     operate: x.operate
    57                 };
    58                 var req = http.request(options, function (res) {
    59                     res.setEncoding('utf8');
    60                     var chunk="";
    61                     res.on('data', function (data) {
    62                         chunk+=data;
    63                     });
    64                     res.on("end",function(){
    65                         var temp=JSON.parse(chunk);
    66                         if(temp.status===true){
    67                             x.nameList.split(",").forEach(function(name){
    68                                 write(name,temp.text);
    69                             });
    70                         }else{
    71                             grunt.log.error(temp.message);
    72                         }
    73                     })
    74                 });
    75                 req.on('error', function (e) {
    76                     grunt.log.error('problem with request: ' + e.message);
    77                 });
    78                 req.write(qs.stringify(post_data));
    79                 req.end();
    80             });
    81         });
    82 
    83     });
    84 };
    View Code
  • 相关阅读:
    【引用】将WINNT.XPE安装到移动硬盘的方法
    手把手教你把Vim改装成一个IDE编程环境(图文)(转)
    [转载]经验丰富的程序员和代码行数
    pkgconfig的使用(转)
    焦点新闻总结
    仿百度弹出框在框架页面中的应用
    发现不明确的匹配的原因和解决办法
    总结一个DAL中写IList返回实体的方法
    后台管理系统界面和样式,点击左边新建标签效果
    在用户控件中用户登录后台脚本判断
  • 原文地址:https://www.cnblogs.com/doublenet/p/4387682.html
Copyright © 2020-2023  润新知