最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript代碼壓縮混淆工具terser詳解

 更新時(shí)間:2025年05月02日 10:53:25   作者:microhex  
本文主要介紹了使用Terser工具對JavaScript代碼進(jìn)行壓縮和混淆,文中詳細(xì)介紹了Terser工具的使用,具有一定的參考價(jià)值,感興趣的可以了解一下

原始的JavaScript代碼在正式的服務(wù)器上,如果沒有進(jìn)行壓縮,混淆,不僅加載速度比較慢,而且還存在安全和性能問題. 因此現(xiàn)在需要進(jìn)行壓縮,混淆處理. 處理方案簡單描述一下:

1. 使用 terser 工具進(jìn)行

安裝 terser工具:

# npm 安裝
npm install terser --save-dev

# 或使用 yarn 安裝
yarn add terser --dev

2. terser工具詳解

基本語法:

terser [input.js] [options] --output output.min.js

例如把 input.js 壓縮并輸出到 output.min.js:

terser input.js --compress --mangle --output output.min.js

3. 使用配置文件配置 Terser

Terser 支持將配置項(xiàng)放在單獨(dú)的配置文件中,便于管理。通常使用一個(gè) JavaScript 文件(如:terser.config.js)進(jìn)行配置. 我們可以創(chuàng)建一個(gè)名為 terser.config.js 的文件, 具體配置如下:

// terser.config.js
module.exports = {
  compress: {
    drop_console: true,   // 去除console.*語句
    drop_debugger: true,  // 去除debugger語句
    passes: 2,            // 多次壓縮迭代,效果更明顯
    unused: true,         // 刪除未使用的代碼
    dead_code: true,      // 刪除無效的代碼分支
  },
  mangle: {
    toplevel: true,       // 混淆頂級(jí)變量和函數(shù)名
    properties: false,    // 默認(rèn)不混淆屬性名,避免破壞外部接口
  },
  output: {
    comments: false,      // 刪除所有注釋
    beautify: false,      // 不進(jìn)行格式化排版,壓縮為一行
  },
  sourceMap: {
    filename: "output.min.js",
    url: "output.min.js.map"
  }
};

對于常用的配置項(xiàng), 詳解如下:
compress 壓縮選項(xiàng):

選項(xiàng)名說明推薦值
drop_console移除所有console.*語句true
drop_debugger移除所有debugger語句true
passes重復(fù)壓縮次數(shù),數(shù)值越高效果越好2~3
unused刪除未使用的變量或函數(shù)true
dead_code刪除死代碼true

mangle 混淆選項(xiàng):

選項(xiàng)名說明推薦值
toplevel混淆頂級(jí)函數(shù)和變量名true
properties是否混淆對象屬性名false(慎用
reserved不被混淆的變量或函數(shù)名(保留關(guān)鍵字)按需配置

output 輸出選項(xiàng):

選項(xiàng)名說明推薦值
comments是否保留注釋false
beautify是否格式化輸出代碼false

sourceMap 源碼映射選項(xiàng):
用于生成 source map 文件,便于調(diào)試

選項(xiàng)名說明
filename指定輸出js文件名
urlsource map 文件的名稱

4. 運(yùn)行 Terser 配置文件

使用配置文件進(jìn)行壓縮:

terser input.js --config-file terser.config.js --output output.min.js
  • –config-file 指定使用的配置文件。
  • –output 指定輸出文件路徑。

5. 在 npm scripts 中配置(推薦)

為了方便管理,建議你在項(xiàng)目的 package.json 中添加一個(gè) npm script:

{
  "scripts": {
    "build:js": "terser src/input.js --config-file terser.config.js --output dist/output.min.js"
  }
}

然后執(zhí)行:

npm run build:js

4. 與 Webpack 集成使用(可選)

如果你使用的是 webpack 項(xiàng)目,推薦使用 terser-webpack-plugin:

安裝插件:

npm install terser-webpack-plugin --save-dev

webpack 配置示例:

// webpack.config.js示例
const TerserPlugin = require('terser-webpack-plugin');

module.exports = {
  //...
  optimization: {
    minimize: true,
    minimizer: [
      new TerserPlugin({
        terserOptions: require('./terser.config.js'),
        extractComments: false, // 不生成LICENSE文件
      }),
    ],
  },
};

7. 調(diào)試與常見問題

如果代碼運(yùn)行出錯(cuò),通常是因?yàn)閙angle或compress配置過于激進(jìn),如properties:true可能會(huì) 破壞代碼。你可以逐步放寬選項(xiàng)排查問題。

建議始終開啟 sourceMap,方便快速定位問題代碼。

8. input.js 與 input.mini.js替換

我們生成了input.mini.js之后, 如何替換呢? 當(dāng)然你可以手動(dòng)替換,那樣可能會(huì)比較復(fù)雜,而且容出錯(cuò).我這邊直接是使用了自己寫的一個(gè)腳本

1. update_js_reference.sh

將html代碼中的 input.js替換成 input.mini.js, 代碼如下:

#!/bin/bash

# 在所有HTML文件中將main.js引用更改為main-mini.js
find  -name "*.html" -type f -exec sed -i '' "s|/static/js/main.js|/static/js/main-mini.js|g" {} \;

echo "已將所有HTML文件中的main.js引用更改為main-mini.js"

2. restore_js_reference.sh

將html代碼中的 input.mini.js復(fù)原成input.js, 用于繼續(xù)開發(fā):

#!/bin/bash

# 在所有HTML文件中將main-mini.js引用更改回main.js
find -name "*.html" -type f -exec sed -i '' "s|/static/js/main-mini.js|/static/js/main.js|g" {} \;

echo "已將所有HTML文件中的main-mini.js引用更改回main.js"

到此這篇關(guān)于Javascript代碼壓縮混淆工具terser詳解的文章就介紹到這了,更多相關(guān)Javascript代碼壓縮混淆terser內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 深入理解JS中attribute和property的區(qū)別

    深入理解JS中attribute和property的區(qū)別

    property 和 attribute非常容易混淆,但實(shí)際上,二者是不同的東西,屬于不同的范疇,本文就詳細(xì)的介紹一下JS中attribute和property的區(qū)別 ,感興趣的可以了解一下
    2022-02-02
  • uni-app登錄與支付功能實(shí)現(xiàn)三秒后自動(dòng)跳轉(zhuǎn)

    uni-app登錄與支付功能實(shí)現(xiàn)三秒后自動(dòng)跳轉(zhuǎn)

    這篇文章主要介紹了uni-app:登錄與支付-- 三秒后自動(dòng)跳轉(zhuǎn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • javascript實(shí)現(xiàn)簡單計(jì)算器效果【推薦】

    javascript實(shí)現(xiàn)簡單計(jì)算器效果【推薦】

    下面小編就為大家?guī)硪黄猨avascript實(shí)現(xiàn)簡單計(jì)算器效果【推薦】。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考
    2016-04-04
  • javascript的this關(guān)鍵字詳解

    javascript的this關(guān)鍵字詳解

    這篇文章主要介紹了javascript的this關(guān)鍵字的用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Bootstrap實(shí)現(xiàn)漸變頂部固定自適應(yīng)導(dǎo)航欄

    Bootstrap實(shí)現(xiàn)漸變頂部固定自適應(yīng)導(dǎo)航欄

    這篇文章給大家介紹了Bootstrap實(shí)現(xiàn)漸變頂部固定自適應(yīng)導(dǎo)航欄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • js 實(shí)現(xiàn)在2d平面上畫8的方法

    js 實(shí)現(xiàn)在2d平面上畫8的方法

    今天小編就為大家分享一篇js 實(shí)現(xiàn)在2d平面上畫8的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • TypeScript 中的可辨識(shí)聯(lián)合(Discriminated Unions)設(shè)計(jì)模式

    TypeScript 中的可辨識(shí)聯(lián)合(Discriminated Unions)設(shè)計(jì)模式

    TypeScript的可辨識(shí)聯(lián)合(Discriminated Unions)是一種結(jié)合聯(lián)合類型和字面量類型的設(shè)計(jì)模式,用于安全處理多種數(shù)據(jù)類型,本文就來詳細(xì)的介紹一下TypeScript可辨識(shí)聯(lián)合的使用,感興趣的可以了解一下
    2026-05-05
  • JS實(shí)現(xiàn)TITLE懸停長久顯示效果完整示例

    JS實(shí)現(xiàn)TITLE懸停長久顯示效果完整示例

    這篇文章主要介紹了JS實(shí)現(xiàn)TITLE懸停長久顯示效果,結(jié)合完整實(shí)例形式分析了JavaScript鼠標(biāo)事件響應(yīng)及頁面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2020-02-02
  • JavaScript面向?qū)ο缶?上部)

    JavaScript面向?qū)ο缶?上部)

    這篇文章主要介紹了JavaScript面向?qū)ο缶?需要的朋友可以參考下
    2017-09-09
  • JavaScript 錯(cuò)誤處理與調(diào)試經(jīng)驗(yàn)總結(jié)

    JavaScript 錯(cuò)誤處理與調(diào)試經(jīng)驗(yàn)總結(jié)

    在Web開發(fā)過程中,編寫JavaScript程序時(shí)或多或少會(huì)遇到各種各樣的錯(cuò)誤,有語法錯(cuò)誤,邏輯錯(cuò)誤。如果是一小段代碼,可以通過仔細(xì)檢查來排除錯(cuò)誤,但如果程序稍微復(fù)雜點(diǎn),調(diào)試JS便成為一個(gè)令Web開發(fā)者很頭痛的問題。
    2010-08-08

最新評論

阿勒泰市| 巴塘县| 昌乐县| 来凤县| 北海市| 兴和县| 南溪县| 咸宁市| 通榆县| 聂拉木县| 永新县| 旅游| 三门县| 无极县| 永定县| 松阳县| 乌鲁木齐县| 闽清县| 三明市| 汉寿县| 陇川县| 绥阳县| 射阳县| 丹阳市| 东光县| 永吉县| 灌云县| 油尖旺区| 府谷县| 石屏县| 湖南省| 栖霞市| 札达县| 高碑店市| 乐安县| 眉山市| 鹤山市| 长泰县| 梁山县| 汉川市| 长白|