使用汇总将 TypeScript 构建到 JavaScript 时如何删除注释

How to remove comments when building TypeScript into JavaScripts using rollup

我正在使用汇总来构建我的 TypeScript 源代码。我想仅删除注释,不进行任何缩小,以便在调试时热更新代码。

我试过rollup-plugin-terser,它可以删除注释,但它也会以某种方式缩小我的代码,我不能完全禁用缩小

我该怎么做?谢谢!

就像@jujubes 在评论中回答的那样,rollup-plugin-cleanup 将完成任务。我想扩大一点。

三件事:

  • ts 添加到扩展列表,例如 extensions: ["js", "ts"] — 否则将不会处理源代码,即使转译步骤 typescript() 在它之前 — 我最初来这里调查为什么 rollup-plugin-cleanup 不适用于 TS 文件,只是缺少 ts 扩展名 ‍♂️
  • 代码覆盖率很重要;在默认设置下,此插件会删除 istanbul 语句,例如 /* istanbul ignore else */,因此最好将它们排除在外,comments: "istanbul",
  • 删除 console.log 是一个单独的挑战,它与 @rollup/plugin-strip 一起完成,并且与 rollup-plugin-cleanup 一起完成。就我而言,取决于它是“dev”还是“prod”Rollup 构建(由 CLI 标志 --dev 控制,如 rollup -c --dev 中所示),我在 [=24= 上删除了 console.log ] 仅构建。但是 devprod 版本的评论都被删除了。

目前,我使用:

import cleanup from "rollup-plugin-cleanup";
...
{
  input: "src/main.ts",
  output: ...,
  external: ...,
  plugins: [
    ...
    cleanup({ comments: "istanbul", extensions: ["js", "ts"] }),
    ...

这是一个 example of rollup-plugin-cleanup being used my Rollup config, here's my Rollup config generator (in monorepos, Rollup configs are hard to maintain by hand so I generate them). If you decide to wire up --dev CLI flag, the gotcha is you have to remove the flag from the commandLineArgs before script ends, otherwise Rollup will throw, see the original tip and it in action

您应该也可以通过 rollup-plugin-terser 实现这一目标。它基于 terser so more information it's actually available on its README, here is the part related to minification。因此,在您的情况下,rollup.config.js 的这一部分应如下所示:

plugins: [
  terser({
// remove all comments
    format: {
      comments: false
    },
// prevent any compression
    compress: false
  }),
],

请记住,您也可以仅为生产启用部分配置。所以在你的 rollup.config.js 中声明了 production const 你可以这样做:

import { terser } from 'rollup-plugin-terser';

const production = !process.env.ROLLUP_WATCH;

export default {
  plugins: [
    production && terser({
      // terser plugin config here
    }),
  ],
};