需求背景

JavaScript 是脚本语言, 没有编译过程, 直接以源码就可以运行. 有的时候, 出于安全或者其他的原因, 我们不希望别人直接读到源码, 或者很容易对源码做出修改使用. 这个时候, 就需要对源码进行混淆压缩处理. 经过处理后的代码体积变小, 不再可读. 本篇介绍利用 webpack 打包工具来完成对后端代码的混淆压缩.

安装配置 webpack

  • 安装
npm i babel-core babel-loader babel-polyfill babel-preset-es2015 babel-preset-stage-2 webpack -D
  • 配置
const webpack = require('webpack');
const path = require('path');function resolve(dir) {return path.resolve(__dirname, dir);
}module.exports = {entry: {app: ['babel-polyfill', './app.js'],},target: 'node',output: {path: __dirname,filename: '[name].min.js'},resolve: {modules: [".", "node_modules"],extensions: ['.js'],alias: {"cfg": resolve("cfg.js")}},externals: function () {let manifest = require('./package.json');let dependencies = manifest.dependencies;let externals = {};for (let p in dependencies) {externals[p] = 'commonjs ' + p;}externals["cfg"] = "commonjs cfg";return externals;}(),node: {console: true,global: true,process: true,Buffer: true,__filename: true,__dirname: true,setImmediate: true},module: {loaders: [{test: /\.js$/,loader: 'babel-loader',exclude: /node_modules/}]}
};if (process.env.NODE_ENV === 'production') {module.exports.plugins = (module.exports.plugins || []).concat([new webpack.optimize.UglifyJsPlugin({minimize: true,compress: false})]);
}
  • 配置说明

上面的 webpack 配置将会把 app.js 和它的依赖源码混淆压缩到一个文件app.min.js当中.

通过 externals 属性告诉 webpack 在打包的时候不要打包 node_modules 目录下面的代码, 也不要将程序的配置文件 cfg.js 一起打包, 因为 node_modules 目录可以根据 package.json 安装生成, 而 cfg.js 是留给用户自定义配置用的, 如果一起打包到 app.min.js 就不方便编辑了, 所以这两项都排除了.

但是这里排除打包 cfg.js 有个问题需要解决. 我们只指定了对 cfg 字样的模块进行排除, 也就是说, 在源码里面, 凡是要引用 cfg.js 的地方, 我们都不能按照相对路径来写, 比如 require(’./cfg.js’), 如果这样写, 那么 cfg.js 还是会打包到最终的文件里在. 正确的写法是 require(‘cfg’). 这就要求把 NODE_PATH 指向当前源码的根目录.

为了方便指定 NODE_PATH, 我们可以安装 cross-env 组件

npm i cross-env -D

接下来, 如果你之前以 node app.js 这种方式运行程序, 那么现在改为这样 cross-env NODE_PATH=. node app.js

还有一个小问题, 我这里使用 vscode, 来做 JS 开发 IDE, 当以相对路径引用库文件的时候, vscode 能够提供很好的编码提示. 但是以指定 NODE_PATH 的方式引用文件时, vscode 不能提示. 为了让 vscode 知道 NODE_PATH 所在, 我们可以在源码根目录下新建一个配置文件来解决, jsconfig.json

{"compilerOptions": {"target": "ES6","baseUrl": "."}
}

打包

cross-env NODE_PATH=. webpack --progress --hide-modules

关于LiveQing

LiveQing商用流媒体服务器解决方案是一套集流媒体点播、转码与管理、直播、录像、检索、时移回看于一体的一套完整的商用流媒体服务器解决方案,LiveQing高性能RTMP流媒体服务器支持RTMP推流,同步输出HTTP、RTMP、HLS、HTTP-FLV,支持推流分发/拉流分发,支持秒开、GOP缓冲、录像、检索、回放、录像下载、网页管理等多种功能,是目前市面上最合理的一款商用流媒体服务器!

转载于:https://www.cnblogs.com/kumukim/p/11006605.html

LiveQing视频流媒体开放平台利用 webpack 打包压缩后端代码相关推荐

  1. webpack打包压缩混淆_细说webpack系列 3. webpack-cli 零配置打包

    大家好!我是萝卜,webpack 4 带来了大量的更新,其中一个就是webpack 4 默认不需要配置文件,下面就带大家体验一下! 初始化项目 首先创建项目,创建一个名为webpack的文件夹,进入文 ...

  2. webpack打包后引用cdn的js_JS逆向:Webpack打包后的代码怎么搞?猿人学爬虫比赛第十六题详细题解...

    实战地址 http://match.yuanrenxue.com/match/16 抓包分析 地址栏输入 地址,按下F12并回车,发现数据在这里: 查看cookie,无加密相关的字段.请求的接口倒是有 ...

  3. java 代码压缩javascript_利用Java来压缩 JavaScript 代码详解

    通过移除空行和注释来压缩 JavaScript 代码 /** * This file is part of the Echo Web Application Framework (hereinafte ...

  4. 服务器部署_打包前后端代码

    一.打包后端代码 1.将项目打包成jar包 mvn clean package -DskipTests 2.本地测试运行 java -jar .\flower-0.0.1-SNAPSHOT.jar 3 ...

  5. webpack打包压缩混淆_前端打包利器:webpack工具

    一.什么是WebPack,为什么要使用它? 1.为什要使用WebPack 现今的很多网页其实可以看做是功能丰富的应用,它们拥有着复杂的JavaScript代码和一大堆依赖包.为了简化开发的复杂度,前端 ...

  6. webpack 打包时,代码压缩,删除console与注释

    new webpack.optimize.UglifyJsPlugin({//删除注释output:{comments:false},//删除console 和 debugger 删除警告compre ...

  7. 学习VUE时,利用webpack打包的错误处理方法

    今天看哔哩哔哩Vue的课程时候遇到三个问题记录一下 1.安装webpack npm install webpack -g 新版需要同时安装 2.安装webpack-cli npm install -- ...

  8. 最高可达100倍压缩!钒星北斗开放平台:渐进式图片压缩库,实现北斗三号RDSS短报文图片传输

    在北斗三号系统的服务区域扩展到全球,RDSS服务性能和容量相对北斗二号大幅提升的背景下,我们研究了基于北斗三号 RDSS链路的语音图像传输技术,可以弥补传统通信系统覆盖能力弱,以及当前阶段我国卫星通信 ...

  9. [one day one question] webpack打包压缩 ES6 js、.vue报错

    问题描述: 报错: ERROR in js/test.js from UglifyJs Unexpected token punc ?(?, expected punc ?:? [js/test.js ...

最新文章

  1. Web App适配iPhoneX
  2. /usr/bin/install: cannot create regular file ‘/usr/local/lib/libpcre.so.1.2.13‘: Permission denied
  3. windows10风格 springboot activiti 整合项目框架源码 shiro 安全框架 druid 数据库连接池...
  4. Java黑皮书课后题第7章:*7.30(模式识别:四个连续相等的数)编写下面的方法,测试某数组是否有四个连续相同值的数。编写测试程序,提示用户输入一个整数列表,调用方法看是否有4个连续且相等的数
  5. 【POJ2117】Electricity [tarjan 割点]
  6. win10专业版和企业版的区别_深度完美Win10_1809_LTSC.1158_64位企业版V2020.0415
  7. 英语四级真题作文 计算机,2019年12月英语四级写作范文:电脑
  8. 并查集模板——并查集(洛谷 P3367)
  9. ruby nokogiri 数据抓取
  10. 闲聊企业数字化转型(1)-供应链数字化
  11. 计算机应用能力考试湖南成绩查询,湖南计算机等级考试成绩查询入口
  12. 2020N1叉车司机证考试及N1叉车司机考试软件
  13. 三重积分平均值_二重积分或者三重积分里面如果积分区域关于坐标轴对称比如积分区域是一个圆或者球,就只用求第一象限或卦...
  14. 名词用作动词举例_英语中名词做动词用的55个例句
  15. 全网推荐的理财小白必读书目《小狗钱钱》,有那么好吗?
  16. 网络安全基本属性和STRIDE
  17. JSD-2204-Dubbo实现微服务调用-Seata-Day04
  18. unity按钮的使用
  19. java需要用到英语_javaSE常用的英语单词
  20. 《Python程序设计》python常用的格式转换

热门文章

  1. CTFshow 命令执行 web30
  2. Evince中文乱码
  3. hdu 1588 Gauss Fibonacci 较难
  4. 爬取小说2--协程间通信Python
  5. CSV文件读取和处理
  6. 现在c++链接oracle,C++ 连接Oracle
  7. access四舍五入取整round_轻松办公|你一点儿也不懂“四舍五入”
  8. ORM框架SQLAlchemy学习笔记
  9. 【MFC三天一个游戏】之 局域网黑白棋
  10. Arcgis10.3在添加XY数据时出现问题