【Javascript系列】Terser通过调用API来实现代码的压缩和优化功能

起源

书接 上回,对Terser的功能做了一个初步的探索。在官方的主页上,有API和CLI二种调用方式。下面先介绍API的调用方式。

通过API来调用

Terser官方对于API的调用示例如链接: Terser API Reference。下面我们通过几个文件来实验

minify.js

#!/usr/bin/env node
'use strict'

const fse = require('fs-extra')
const { minify } = require("terser");

// Global functions:

// terser minify - pms.libv3.js
(minify({"pms.libv3.js": fse.readFileSync("pms.libv3.js", "utf-8")}, {})).then(res => {
    fse.writeFileSync("pms.libv3.min.js", res.code, "utf-8");
});

pms.libv3.js

function osmpTempKVPairs() {
  return {
    set: function(k, v) {
      localStorage.setItem(k, v);
    },
    get: function(k) {
      return localStorage.getItem(k);
    }
  }
}

API调用过程中的一个隐含的技术点 - 异步调用和Promise对象

细心的同学肯定发现了,minify()函数调用和fse.wirteFileSync()函数调用,没有按常规的方式一行一行的直接按顺序调用,而是以(minify()).then()的方式里进行回调。

原因是minify是一个异步函数,它在被调用后,就直接返回了,返回值是一个Promise对象。如果这个时候,顺序去调fse.writeFileSync(),会报错,因为minify还没有执行完压缩和优化的过程(尤其当文件比较大的时候,官方示例中没有提到)
在这里插入图片描述
所以,正确的做法是,在调用minify()之后 ,正确的方式是获取minify()的返回值Promise对象,继续调用Promise()对象的then()方法,在方法里写入压缩和优化后的代码到min.js文件。
在这里插入图片描述

官方文档中的一个有点容易忽略和混淆的地方

在这里插入图片描述

关于Promise

一个 Promise 必然处于以下几种状态之一:

  • 待定(pending):初始状态,既没有被兑现,也没有被拒绝。(如上文日志中的Pending状态)
  • 已兑现(fulfilled):意味着操作成功完成。
  • 已拒绝(rejected):意味着操作失败。

.then() 方法最多接受两个参数;第一个参数是 Promise 兑现时的回调函数(如上文中代码里的res),第二个参数是 Promise 拒绝时的回调函数。每个 .then() 返回一个新生成的 Promise 对象,可被用于链式调用。

MDN文档中对于Promise的说明,同时也有详细参考的例子。 : Promise 对象表示异步操作最终的完成(或失败)以及其结果值

各位同学自行打开链接查看。如果 有不明白的,随时给我留言,有问必回。

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

招财猫_Martin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值