发布于 2026-01-06 1 阅读
0

@pika/pack - 发布优秀的 npm 包。DEV 全球展示挑战赛,由 Mux 主办:展示你的项目!

@pika/pack - 发布优秀的 npm 包。

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

注:本文最初发表于pika.dev

如果你最近在 npm 上发布过软件包,你就会知道现代构建流程需要做多少工作。编译 JavaScript、编译 TypeScript、将 ES 模块语法 (ESM) 转换为 Common.js、配置 package.json 清单……而这仅仅是基础工作。

那么,你的软件包是否针对浏览器和打包工具进行了优化?用户能否通过UNPKG加载你的软件包?它是否包含VSCode 和 TypeScript 用户所需的类型定义?是否已去除所有不必要的文件,使其尽可能小巧?用户会关注这些优化,但要做好这些优化,需要更多的知识、配置、工具、时间和精力。

@pika/pack 可以轻松构建出色的软件包:

  • 简单⚡️使用预配置的插件构建您的整个软件包。
  • 灵活🏋️‍♀️ 选择符合您需求的插件和优化方案。
  • Holistic ⚛️ 让我们来处理您的代码、资源package.json 配置。

软件包构建流程

@pika/pack连接预配置的插件,自动构建并优化您的软件包。这些插件封装了BabelRollup等常用工具,并针对 npm 进行了优化。因此,@pika/pack 几乎无需您进行任何配置即可构建软件包。

@pika/pack 甚至会自动创建和配置您的软件包的 package.json 清单。

之所以可行,是因为@pika/pack会构建你的整个包:代码、资源,甚至包括 package.json 清单文件。通过构建整个包,最终你会得到一个完整的pkg/目录,可以直接发布。诸如“main”、“module”、“umd:main”、“types”、“unpkg”之类的入口点,甚至像“sideEffects”和“files”这样的高级选项,都由你的构建插件处理。

入门很简单:

// 1. Install @pika/pack!
$ npm install -g @pika/pack
// 2. Add this to your package.json manifest:
"@pika/pack": {"pipeline": []},
// 3. Run @pika/pack!
$ pack build

😎 🆒

那么现在怎么办?如果你运行pack build一个空管道,你会得到一个空包。这没什么用。

为了帮助您入门,以下是我们推荐的五件使用@pika/pack最有趣的事情:

1. 默认发布现代 ES2018 JavaScript(1 行代码)

"@pika/pack": {
    "pipeline": [
        ["@pika/plugin-standard-pkg", {"exclude": ["__tests__/**/*"]}]
    ]
}

大多数软件包首先会使用@pika/plugin-standard-pkg插件。这是我们的标准“源代码”构建器,它可以将任何 JavaScript 和 TypeScript 源代码构建为最新的 ES2018 语言规范。TypeScript 默认受支持,并且您本地的任何自定义 Babel 插件.babelrc都会自动使用(该插件内部由 Babel 提供支持)。

这为我们后续的开发流程提供了一个标准的 ES2018 目标框架。额外好处:部分用户可能支持现代 JavaScript,可以直接利用这个 ES2018 发行版,从而获得更小、更快、更精简的软件包。

2. 发布 Node.js 和 Web 优化版本(各一行)

"@pika/pack": {
    "pipeline": [
        ["@pika/plugin-standard-pkg"],
        ["@pika/plugin-build-node"],
        ["@pika/plugin-build-web"]
    ]
}

创建完现代 ES2018 版本后,向软件包添加 Node.js 和 Web 优化版本就变得非常简单。` @pika/plugin-build-node`会将 Node.js 版本转译为可在任何受支持的 Node.js 版本上运行。` @pika/plugin-build-web`则会构建更现代的 ES 模块 (ESM) 版本:针对打包工具进行了优化,并编译为可在所有原生支持 ESM 语法的浏览器上运行。

这两个插件内部都使用了 Rollup,但您无需自行配置任何打包逻辑。只需三行 JSON 代码,即可获得一个针对两大主流 JS 平台完全优化的软件包。而且,由于@pika/pack会构建您的整个软件包,因此您的 package.json 清单文件会自动配置“main”、“module”和“esnext”入口点。

3. 自动生成 TypeScript 定义(1 行代码)

"@pika/pack": {
    "pipeline": [
        ["@pika/plugin-standard-pkg"],
        ["@pika/plugin-build-node"],
        ["@pika/plugin-build-web"],
        ["@pika/plugin-build-types"]
    ]
},

借助@pika/pack,每个包都会自动获得.d.tsTypeScript 定义文件,这要归功于@pika/plugin-build-types插件。即使您编写的是 JavaScript,此插件也会使用 TypeScript 从您的 JavaScript 和 JSDoc 中自动生成类型定义!

4. 发布 WASM!或者 Reason、Rust、C++ 等等……(1-2 行)

"@pika/pack": {
    "pipeline": [
        ["@pika/plugin-wasm-assemblyscript"],
        ["@pika/plugin-wasm-bindings"]
    ]
},

管道的概念既简单又灵活。灵活到你的包源甚至不需要是 JavaScript:

5. 自动增强您的套餐(1 行)

"@pika/pack": {
    "pipeline": [
        ["@pika/plugin-standard-pkg"],
        ["@pika/plugin-build-node"],
        ["@pika/plugin-simple-bin", {"bin": "my-cli"}]
    ]
}

构建插件还可以通过一些非常令人兴奋的方式增强现有构建。我们目前最喜欢的增强功能是@pika/plugin-simple-bin,它会将一个简单的 CLI 包装器注入到任何包中,并自动配置 package.json 以指向它。

我们使用 @pika/pack 来构建 @pika/pack,并且我们专门使用此插件来添加命令行界面,而无需任何 package.json 配置和设置方面的麻烦。

我们迫不及待地想看看这种封装概念能带来哪些可能性,尤其是在命令行界面方面:程序失败时自动重启、运行后检查软件包更新、记录使用统计信息……可能性无穷无尽!

发布您的套餐

发布软件包应该像构建它一样简单。因此,我们将np(我们自称是“更好的 npm 发布工具”)中我们最喜欢的部分整合到了@pika/pack中。有了这条publish命令,您无需担心如何发布已构建的软件包。只需pack publish在您的顶级项目中运行,@pika/pack 就会引导您完成新版本发布过程。

最后还附上了一个方便的unpkg.com链接,以便您可以立即查看您的新包裹。

立即体验 @pika/pack!

npm install -g @pika/pack

别犹豫了,下次打包的时候试试@pika/pack(或者任何可以升级到 2019 版的旧版本)。试过之后,请告诉我们效果如何!

Pika是一个旨在推动 JavaScript 生态系统发展的项目。Pika 的使命是让现代 JavaScript 更易于使用,具体做法是让用户更容易在 npm 上查找、发布、安装和使用现代软件包。希望 @pika/pack 能让我们离这个目标更近一步。

已在使用 @pika/pack 的项目

文章来源:https://dev.to/pika/pika-pack-publish-great-npm-packages-3dnh