1

我不想一次又一次地安装节点模块,所以我在这里找到了一个帖子。

npm link用来让我需要全局包。

但是,当我使用该方法时,html-minifier-terser它无法正常工作。该minify函数返回Promise { <pending> }而不是 HTML。

但是build.js在该项目中它可以正常工作,pug并且不是html-minifier-terser在本地安装的npm installnpm install -g

这是代码:

const fs = require('fs');
// Compile the source code
const pug = require('pug');
// Compile the source code


buildFile('index');

function buildFile(filename) {

  var fs_content = fs.readFileSync(`./data/page-${filename}.json`);
  var options = JSON.parse(fs_content);

  const compiledFunction = pug.compileFile(`./pugs/${filename}.pug`,{});

  // Render a set of data
  var pug_html = (compiledFunction(options)); // this works fine.
  var minify = require('html-minifier-terser').minify;
  var result = minify(pug_html, {
    removeAttributeQuotes: true,
    minifyJS:true,
    minifyCSS:true,
    removeComments:true,
    collapseWhitespace:true,
    collapseInlineTagWhitespace:true
  });
  console.log(result); // Returns Promise { <pending> } instead of the HTML
}

更新:

我试过await了,但也失败了:

  var result = await minify(pug_html, {
               ^^^^^

SyntaxError: await is only valid in async function
    at new Script (vm.js:79:7)
    at createScript (vm.js:251:10)
    at Object.runInThisContext (vm.js:303:10)
4

2 回答 2

1

也许它是一个异步函数,你需要做

var result = await minify(pug_html, {
    removeAttributeQuotes: true,
    minifyJS:true,
    minifyCSS:true,
    removeComments:true,
    collapseWhitespace:true,
    collapseInlineTagWhitespace:true
  });

使用 await 关键字,这使得它“等待”来自函数的响应

于 2021-09-02T00:18:39.917 回答
0

请参阅此链接以了解有关承诺的更多信息。本质上,您必须等待 minifyJS 通过等待它返回 HTML(使用 .then((arg)=>{})。另请参阅本自述文件的底部

  minify(pug_html, {
    removeAttributeQuotes: true,
    minifyJS:true,
    minifyCSS:true,
    removeComments:true,
    collapseWhitespace:true,
    collapseInlineTagWhitespace:true
  }).then((res) => {result = res});
于 2021-09-02T00:19:58.967 回答