使用rollup将TypeScript编译成JavaScript时如何删除注释

10

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

我已经尝试过rollup-plugin-terser,它可以删除注释,但它也会对我的代码进行某种程度的缩小,我无法完全禁用缩小

我该怎么做? 谢谢!


请访问以下链接以获取有关Rollup插件清理的详细信息:https://www.npmjs.com/package/rollup-plugin-cleanup - Jujubes
2个回答

11

像 @jujubes 在评论中回答的那样,rollup-plugin-cleanup 可以完成这个任务。我想再详细解释一下。

有三点:

  • ts 添加到扩展列表中,例如 extensions: ["js", "ts"] — 否则源码不会被处理,即使在它之前进行了转换步骤 typescript() — 我最初来到这里是为了调查为什么 rollup-plugin-cleanup 不能处理 TS 文件,原来只是缺少了 ts 扩展名 ‍♂️
  • 代码覆盖率 很重要;在默认设置下,此插件将删除类似于 /* istanbul ignore else */istanbul 语句,因此最好将它们排除在外,comments: "istanbul",
  • 去除 console.log 是一个单独的挑战,可以使用 @rollup/plugin-strip 完成,并与 rollup-plugin-cleanup 配合使用。在我的情况下,根据一个 "dev" 或 "prod" 的 Rollup 构建(由 CLI 标志 --dev 控制,例如 rollup -c --dev),我仅在 prod 构建中移除 console.log。但是注释将在 devprod 构建中都被删除。

目前,我使用:

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

这是一个使用 rollup-plugin-cleanup 的 Rollup 配置的示例,这是我的 Rollup 配置生成器(在 monorepo 中,手动维护 Rollup 配置非常困难,因此我使用代码生成器)。如果你决定连接 --dev CLI 标志,需要在脚本结束之前从 commandLineArgs 中删除该标志,否则 Rollup 会抛出异常,详见原始提示实际操作中的情况


9
你只需使用rollup-plugin-terser插件就能达到同样的效果。它基于terser,更多信息可以在该项目的README中找到,下面是关于压缩选项的部分。因此,在你的情况下,rollup.config.js文件的这一部分应该如下所示:
plugins: [
  terser({
// remove all comments
    format: {
      comments: false
    },
// prevent any compression
    compress: false
  }),
],

请注意,您也可以仅在生产环境下启用部分配置。因此,在您的rollup.config.js中声明production常量后,您可以这样操作:

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

const production = !process.env.ROLLUP_WATCH;

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

这是最好的答案! - HerberthObregon
1
这个似乎不再起作用了?https://github.com/terser/terser/commit/675e9035 - diegocr
@diegocr 据我所知,这只是删除了“beautify”选项,但您仍然可以删除注释。文档中没有提到此功能已被删除。 - mpro
感谢您的回复。事实是,我尝试了这种方法,但“compress:false”对我没有起作用(它仍然压缩/混淆代码),这促使我发现了“beatify”提交和相关内容。因此,如果这对你们所有人仍然有效,那么我的一些操作可能存在问题。 - diegocr
@diegocr 没关系。很难说在你的情况下是什么问题。我现在无法自行检查,但根据文档,仍然可以使用它。对我来说,它也没有立即生效,我需要稍微调整一下,所以我认为可能是你这边的问题。 - mpro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接