首页 > 其他分享 >[Terser] Intro

[Terser] Intro

时间:2025-01-20 10:12:04浏览次数:1  
标签:index Terser const 压缩 js terser Intro

Terser

Terser 是一个流行的 JavaScript 解析器和压缩器,它可以帮助你优化 JavaScript 代码以减少其大小,从而提高 web 页面的加载速度。TerserUglify-es 的替代品,后者已经停止维护,Terser 支持 ES6 和更高版本的 JavaScript

16894736097494

Terser 官网:https://terser.org/

以下是 Terser 的一些主要功能:

  • 删除无用的代码:Terser 可以自动删除你的代码中的无用代码(也称为 "dead code"),例如未被调用的函数和未被使用的变量。

  • 压缩和混淆代码:Terser 可以将你的代码压缩到尽可能小的大小。它可以移除空格和注释,将变量和函数名重命名为短的名称,以及使用其他的压缩技术。这也有助于混淆你的代码,使得它更难被人类理解,从而提高代码的安全性。

  • 保留注释:虽然 Terser 默认会移除所有的注释,但你可以配置它保留某些注释,例如包含特定关键词的注释。

  • 源码映射支持:Terser 支持生成源码映射(source map),这可以帮助你在压缩后的代码中进行调试。

  • 支持 ES6 及更高版本:Terser 支持最新版本的 JavaScript,包括 ES6、ES7、ES8 等。

这一次我们在学习这个新工具的时候,我们就按照上一节课介绍的方式来学习:

  • API
  • CLI
  • 配置文件

API

首先创建一个项目 terser-demo,使用 pnpm init 进行一个初始化,安装相应的依赖:

pnpm add terser -D

接下来在 src/index.js 文件里面写入了一些要压缩的代码,之后在 src 下面创建 compress.js,打算利用 terser 的 api 对文件进行压缩。

compress.js 的代码如下:

// 对源码进行压缩

const { minify } = require("terser");
const path = require("path");
const fs = require("fs");

// 定义输入和输出文件的路径
const codePath = path.resolve("src", "index.js");
const outDir = "dist";
const outPath = path.resolve(outDir, "index.js");
const outSourcemapPath = path.resolve(outDir, "index.js.map");

// 读取源码文件
const code = {
  "index.js": fs.readFileSync(codePath, "utf8"),
};

// 压缩对应的配置项
const options = {
  sourceMap: {
    filename: "index.js",
    url: "index.js.map",
  },
};

// 准备工作完成后,接下来就调用 API 进行压缩
minify(code, options)
  .then((result) => {
    // console.log(result)
    // 将压缩后的内容写入到规定的位置
    if (!fs.existsSync(outDir)) {
      fs.mkdirSync(outDir, { recursive: true });
    }

    fs.writeFileSync(outPath, result.code);

    // 生成 sourcemap
    if (result.map) {
      fs.writeFileSync(outSourcemapPath, result.map);
    }

    console.log("压缩工作已完成...");
  })
  .catch((err) => {
    console.log("压缩工作失败,错误信息如下:");
    console.error(err);
  });

在上面的代码中,我们用到了 terser 的 minify 这个方法来对代码进行压缩。其中关于 options 压缩配置对象这一块,可以在 https://terser.org/docs/api-reference/#minify-options-structure 看到能够配置的所有选项。

关于 terer 具体的 API,可以参阅官网:https://terser.org/docs/api-reference/

CLI

CLI 部分背后调用的就是 API,在官网的 https://terser.org/docs/cli-usage/ 这个位置可以看到该工具所支持的 CLI

基本的格式如下:

terser [input files] [options]
  • input files:要压缩的文件
  • options:压缩配置项

例如:

"scripts": {
    // ...
    "compress": "terser ./src/index.js -o ./dist/index.js --source-map -o ./dist/index.js"
 },

配置文件

terser 由于这个工具比较小,所以没有支持单独的配置文件,但是你要注意不支持单独的配置文件不代表不支持配置,作为一个工具,肯定是支持配置的。

你可以在 https://terser.org/docs/options/ 看到该工具所有的配置项。

标签:index,Terser,const,压缩,js,terser,Intro
From: https://www.cnblogs.com/Answer1215/p/18680830

相关文章

  • [Babel] Intro Babel - 05. API
    APIs关于babel里面的APIs主要位于@babel/core这个依赖里面,你可以在官网左下角的ToolingPackages分类下找到这个依赖包。这里顺便介绍一下每一种依赖包的作用:@babel/parser:是Babel的解析器,用于将源代码转换为AST。@babel/core:Babel的核心包,它提供了Babel的......
  • [Babel] Intro Babel - 02 Configure file
    配置文件配置文件格式配置文件选项配置文件的格式在babel中,配置文件本身又可以分为两种:项目范围的配置文件文件相关配置文件项目范围配置文件顾名思义,就是该配置文件针对整个项目生效的一个配置,这种类型的配置文件一般放在项目根目录下面,babel对项目范围级别的配置......
  • [Babel] Intro Babel - 03. CLI
    CLI关于babel所提供的CLI,你可以在https://babeljs.io/docs/babel-cli看到所有所支持的CLI命令。要使用CLI命令,首先第一步是安装:pnpmadd--save-dev@babel/core@babel/cli注意在安装@babel/cli这个包的时候,需要同时安装@babel/core这个包,这个包是提供babel......
  • Babel Intro Babel - 01 Introduction
    Babel介绍Babel是一个编译器,主要用于将最新的JavaScript代码转化为向后兼容的代码,以便在老版本的浏览器或环境中运行。例如,你可能在开发时使用了ES6、ES7或者更高级的JavaScript特性,但是有些浏览器可能并不支持这些新特性,这时就可以用Babel来将代码转化为ES5或者更早......
  • 程序员学英文之Greetings 、Introductions &Sight-Seeing
    Greetings&IntroductionsDialogue-1Self-introduction&CompanyProfile自我介绍和公司介绍Keepalowprofile. 保持低调。It’smygreathonor tospeakheretoday.今天能在这里跟大家分享,我无比荣幸。I’veheardsomuch/alot/agreatdeal/aboutyou.......
  • 「Extra」Outerside Character Intro.
    OutersideLegend人物介绍伦诺克斯Tdl泰德·都林·拉斯托雷(TedDurinLastorry)本作主角,尚未成长的伦诺克斯,实际身份是星光之首埃努诺尔的使者,初登场19岁。Tco托瑞拉·科斯特·欧瑞德(TorreillaCostelOride)强大而理智的Tco,一名合格的伦诺克斯,也是Tdl父亲的故友,实......
  • An introduction of planar graphs, 1-planar graphs and K5-minor free graphs
    Aplanargraphisagraphthatcanbedrawnonaplaneinsuchawaythatnoedgescrosseachother,andthisdrawingisaplanegraph.Forexample,inFigure1,thefirstgraphisacompletegraphoforder4,denotedbyK4,whichisplanargraph.Thes......
  • 2024-12-30 文件输出和Wireshark_Intro_v7.0
    fscanf与fprintf的区别函数用途示例fscanf从文件中读取格式化数据fscanf(fp,"记录数:%d\n",&count);fprintf向文件中写入格式化数据fprintf(fp,"记录数:%d\n",count);在读取或写入文件时,fscanf和fprintf的功能是通过指定格式化字符串来解析或生......
  • ECSE 415 Introduction to Computer Vision
    IntroductiontoComputerVision(ECSE415)Assignment4:NeuralNetworksDEADLINE:November,3rdPleasesubmityourassignmentsolutionselectronicallyviathemyCoursesassignmentdropbox.ThesubmissionshouldincludeasingleJupyternotebook.Moredetai......
  • MongoDB 入门操作(Introduction to MongoDB Operations)
    MongoDB入门操作目录MongoDB是非关系型文档数据库的典型代表,非常适合写入大批量、高并发以及不规则的数据,因此广泛应用于爬虫开发的存储后端。✍当业务需求对联表查询不是很强烈,相反需要存储大量关联性不是很强的数据时,可以考虑使用MongoDB文档型数据库。在Mon......