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

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

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

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

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

安裝 terser工具:

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

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

2. terser工具詳解

基本語(yǔ)法:

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.*語(yǔ)句
    drop_debugger: true,  // 去除debugger語(yǔ)句
    passes: 2,            // 多次壓縮迭代,效果更明顯
    unused: true,         // 刪除未使用的代碼
    dead_code: true,      // 刪除無(wú)效的代碼分支
  },
  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"
  }
};

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

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

mangle 混淆選項(xiàng):

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

output 輸出選項(xiàng):

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

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

選項(xiàng)名說(shuō)明
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)試與常見(jiàn)問(wèn)題

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

建議始終開(kāi)啟 sourceMap,方便快速定位問(wèn)題代碼。

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

我們生成了input.mini.js之后, 如何替換呢? 當(dāng)然你可以手動(dòng)替換,那樣可能會(huì)比較復(fù)雜,而且容出錯(cuò).我這邊直接是使用了自己寫(xiě)的一個(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ù)開(kāi)發(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)容請(qǐng)搜索腳本之家以前的文章或繼續(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),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • javascript實(shí)現(xiàn)簡(jiǎn)單計(jì)算器效果【推薦】

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

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

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

    這篇文章主要介紹了javascript的this關(guān)鍵字的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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平面上畫(huà)8的方法

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

    今天小編就為大家分享一篇js 實(shí)現(xiàn)在2d平面上畫(huà)8的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    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ù)類型,本文就來(lái)詳細(xì)的介紹一下TypeScript可辨識(shí)聯(lián)合的使用,感興趣的可以了解一下
    2026-05-05
  • JS實(shí)現(xiàn)TITLE懸停長(zhǎng)久顯示效果完整示例

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

    這篇文章主要介紹了JS實(shí)現(xiàn)TITLE懸停長(zhǎng)久顯示效果,結(jié)合完整實(shí)例形式分析了JavaScript鼠標(biāo)事件響應(yīng)及頁(yè)面元素屬性動(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開(kāi)發(fā)過(guò)程中,編寫(xiě)JavaScript程序時(shí)或多或少會(huì)遇到各種各樣的錯(cuò)誤,有語(yǔ)法錯(cuò)誤,邏輯錯(cuò)誤。如果是一小段代碼,可以通過(guò)仔細(xì)檢查來(lái)排除錯(cuò)誤,但如果程序稍微復(fù)雜點(diǎn),調(diào)試JS便成為一個(gè)令Web開(kāi)發(fā)者很頭痛的問(wèn)題。
    2010-08-08

最新評(píng)論

潮安县| 兴业县| 衡山县| 赫章县| 繁峙县| 桃源县| 电白县| 新建县| 龙游县| 佛坪县| 房产| 随州市| 鄯善县| 格尔木市| 博野县| 洛阳市| 鹰潭市| 四会市| 阿克| 竹溪县| 西吉县| 安溪县| 孝义市| 邻水| 邵阳县| 革吉县| 磐安县| 杨浦区| 高州市| 白水县| 墨竹工卡县| 固始县| 澎湖县| 博客| 米林县| 霍山县| 章丘市| 婺源县| 石林| 奇台县| 娱乐|