全局引入html-minifier-terser时minify返回Promise {<pending>}而非HTML怎么办?
问题根因
- 版本API不兼容:你本地项目安装的是v5及更早版本的
html-minifier-terser,该版本的minify方法为同步API,可直接返回压缩后的HTML结果;你全局安装的是v6及以上版本,官方已将minify调整为异步API,调用后会返回Promise对象,需通过异步方式获取结果,该问题和npm link的使用无关,仅为版本不一致导致。 - await语法报错:
await关键字仅可在被async标记的函数内部使用,你直接在普通函数内调用await不符合语法规范,因此触发报错。
解决方案
方案一:适配新版本异步API(推荐)
修改代码适配异步逻辑,修复后代码如下:
const fs = require('fs'); const pug = require('pug'); const { minify } = require('html-minifier-terser'); buildFile('index'); // 给函数添加async标记 async function buildFile(filename) { const fs_content = fs.readFileSync(`./data/page-${filename}.json`); const options = JSON.parse(fs_content); const compiledFunction = pug.compileFile(`./pugs/${filename}.pug`,{}); const pug_html = compiledFunction(options); // 用await接收异步返回的压缩结果 const result = await minify(pug_html, { removeAttributeQuotes: true, minifyJS: true, minifyCSS: true, removeComments: true, collapseWhitespace: true, collapseInlineTagWhitespace: true }); console.log(result); // 后续对result的处理逻辑请放在当前函数内 }
方案二:降级全局包版本(无需修改原有代码)
如果你不想调整现有代码,可直接将全局安装的html-minifier-terser降级到v5版本,执行以下命令即可:
npm install -g html-minifier-terser@5
降级完成后原有代码可直接正常运行。
内容的提问来源于stack exchange,提问作者AGamePlayer
相关产品推荐
相关产品推荐

