使用 Rollup 创建具有 CommonJS 和 ESM 支持的 NPM 包

使用 rollup 创建具有 commonjs 和 esm 支持的 npm 包

使用 rollup 创建具有 commonjs (cjs) 和 ecmascript 模块 (esm) 支持的 npm 包

在这篇文章中,我们将探索如何使用 rollup 创建支持 commonjs (cjs) 和 ecmascript 模块 (esm) 的 npm 包。

rollup 是一个 javascript 捆绑器,非常适合创建库和包,因为它生成高度优化的代码包,可以在不同环境中轻松使用。

项目结构:

my-npm-package/├── src/│   └── index.js├── rollup.config.js└── package.json

1. 配置项目

首先为您的 npm 包创建一个新目录。在目录中,运行命令:

npm init -y

这将生成一个基本的 package.json 文件。

然后安装必要的依赖项:

npm install rollup rollup-plugin-commonjs rollup-plugin-node-resolve

解释依赖关系:

rollup:模块打包工具。rollup-plugin-commonjs: 用于处理 commonjs 模块的 rollup 插件。rollup-plugin-node-resolve: 用于解决 node.js 模块依赖关系的 rollup 插件。

2.创建src文件夹

在项目目录中创建一个名为 src 的文件夹。

在 src 中,使用 npm 包中的代码创建一个 index.js 文件。

// src/index.jsfunction hello(name) {  return `hello, ${name}!`;}export { hello };

3. 创建 rollup.config.js 文件

使用 rollup 配置创建 rollup.config.js 文件。

rollup 有 2 个输出配置选项:第一个:所有代码都在一个输出文件中。第二个:使用preservemodules来维护模块结构。

3.1 rollup.config.js 文件,不保留模块结构

rollup 默认情况下将所有模块合并到一个输出文件中。这意味着您的所有模块(包括您自己的模块及其依赖项)都将合并到一个 javascript 文件中。

//rollup.config.jsimport commonjs from 'rollup-plugin-commonjs';import resolve from 'rollup-plugin-node-resolve';export default [  {    input: 'src/index.js', // arquivo principal de entrada    output: {      file: 'dist/index.cjs.js', // diretório de saída para commonjs      format: 'cjs',      sourcemap: true,    },    plugins: [      resolve(),      commonjs(),    ],  },  {    input: 'src/index.js', // arquivo principal de entrada    output: {      file: 'dist/index.esm.js', // diretório de saída para es modules      format: 'esm',      sourcemap: true,    },    plugins: [      resolve(),  // resolve módulos de node_modules      commonjs()  // converte pacotes commonjs para esmodules    ],  },];

解释设置:

input: 定义 rollup 的输入文件。output: 设置输出文件和输出格式。format: 定义模块格式(esm 或 commonjs)。plugins: 定义将在 rollup 中使用的插件。

3.2 rollup.config.js 文件保留模块结构

rollup 保留了原始代码的模块结构。项目中的每个模块都将打包在自己的文件中。

import resolve from '@rollup/plugin-node-resolve';import commonjs from '@rollup/plugin-commonjs';export default {  input: 'src/index.js',  // arquivo principal de entrada  output: [    {      dir: 'dist/cjs', // diretório de saída para commonjs      format: 'cjs',      entryfilenames: '[name].js', // mantém o nome do arquivo original      exports: 'auto',      preservemodules: true, // preserva a estrutura dos módulos      preservemodulesroot: 'src', // diretório base que será mantido    },    {      dir: 'dist/esm', // diretório de saída para es modules      format: 'esm',      entryfilenames: '[name].js',      preservemodules: true,      preservemodulesroot: 'src',    }  ],  plugins: [    resolve(),  // resolve módulos de node_modules    commonjs()  // converte pacotes commonjs para esmodules  ]};

解释设置:

entryfilenames: 使用占位符定义输出文件名的模式:[name]: 替换为模块名称。[hash]:替换为文件的唯一哈希值。[format]: 替换为模块格式(esm 或 cjs)。preservemodules: 保留代码的原始模块结构。如果为 true,每个模块将打包在自己的文件中。preservemodulesroot: 定义要保留的模块的根目录。

4.配置package.json

使用以下信息更新 package.json 文件:

{  "name": "my-npm-package",  "version": "1.0.0",  "description": "",  "main": "dist/index.cjs.js",  "module": "dist/index.esm.js",  "scripts": {    "build": "rollup -c",    "dev": "rollup -c --watch"  },  "repository": {    "type": "git",    "url": "git+https://github.com/your-username/my-npm-package.git"  },  "author": "",  "license": "mit",  "devdependencies": {    "rollup": "^3.2.1",    "rollup-plugin-commonjs": "^18.0.0",    "rollup-plugin-node-resolve": "^6.3.0"  }}

解释属性:

名称: npm 包名称。版本:套餐版本。描述:包装描述。main: 定义 commonjs 项目的主文件。模块: 定义 esm 项目的主文件。脚本: 定义用于构建和开发的脚本。repository: 定义包存储库。作者: 包作者姓名。许可证: 软件包许可证。

5. 编译并发布包

运行 npm install 命令来安装依赖项。

运行 npm run build 命令来编译您的包。这将在 dist/.

中生成编译后的文件

然后使用 npmpublish 命令将包发布到 npm。

6. 使用包

您现在可以在其他项目中使用您创建的 npm 包。

commonjs 项目中的示例:

const mypackage = require('my-npm-package');console.log(mypackage.hello('world'));

esm 项目中的示例(当 package.json 具有 “type”: “module” 时):

import { hello } from 'my-npm-package';console.log(hello('World'));

结论

使用 rollup 创建具有 commonjs 和 esm 支持的 npm 包非常简单。通过遵循本文中概述的步骤,您可以构建一个灵活的、可重用的包,以满足不同项目的需求。

以上就是使用 Rollup 创建具有 CommonJS 和 ESM 支持的 NPM 包的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1493236.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 15:31:21
下一篇 2025年12月19日 15:31:36

相关推荐

  • 【个人网站】如何使用Notion作为数据库进行全栈开发

    网址:https://www.jessieontheroad.com/zh/GitHub:https://github.com/Jessie-jzn 使用 notion 作为数据库进行全栈开发是一种强大的方法,它将 notion 的易用性与其丰富的 api 用于管理和显示数据相结合,使其成为开发高效…

    2025年12月19日
    000
  • TEMPLINK 单一、安全的链接可在几秒钟内访问多个文件

    TEMPLINK 实际上是做什么的? Templink 允许您创建一个安全的链接,只需几秒钟即可访问多个文件。通过设置过期日期和密码保护的选项,您可以完全控制您的文件共享体验。 在这里尝试 – https://templink-nu.vercel.app/Github 存储库 &#821…

    2025年12月19日
    000
  • 摆脱 JSON:Web 开发中数据传输的新方法

    如果您一直在 web 开发行业进行编码,那么您很可能非常熟悉 json。这是包罗万象的事实上的标准,从未受到挑战。它无处不在,你已经习惯了。您的所有 rest 调用都通过 json 传输数据。您知道该格式的局限性,并且接受它们。 还是必须这么做? (注意:所有包和代码的链接都在文章的链接部分) 简史…

    2025年12月19日
    000
  • 使用 Github 页面部署 React Nextjs 应用程序的步骤

    由于 github pages 的静态特性和 next.js 的动态功能,将 next.js 应用程序部署到 github pages 可能有点棘手。在本文中,我将引导您完成成功部署的步骤。 先决条件 github 帐户您的计算机上安装了 node.js 和 npm准备部署的 next.js 项目 …

    2025年12月19日
    000
  • 创建您自己的 npm 库

    介绍 react.js、three.js 等我们平时使用的优​​秀库其实都可以自己创建。我发布这篇文章是对加拿大一所大学创建图书馆课程的回顾。 先决条件 node.js 必须可用。安装 node.js 即可使用 npm。 将您自己的库发布到 npm 项目设置 首先,创建一个 npm 帐户。 npmj…

    2025年12月19日 好文分享
    000
  • VShell 工具的 Git Rebase 和代码重构

    本周,我有机会深入研究如何使用 git rebase,同时重构我的 vshell 工具的代码库。我的主要任务是改进代码的结构和可维护性,同时遵守 dry(不要重复自己)原则,这对于使代码更具可读性、可维护性和更易于调试至关重要。此外,我遵循了重构目录中概述的各种重构模式,例如提取函数、提取类和重命名…

    2025年12月19日
    000
  • Creating a Nextjs API to Convert HTML to PDF with Puppeteer (Vercel-Compatible)

    将 html 转换为 pdf 是 web 应用程序中的常见要求。在这篇博文中,我们将探索如何创建一个 next.js api 路由,使用 puppeteer 将 html 转换为 pdf,并确保它在部署到 vercel 时正常工作。 挑战 虽然 puppeteer 是一款功能强大的 html 到 p…

    2025年12月19日
    000
  • 如何安装和使用 NVM 管理多个 Nodejs 版本

    介绍 高科技爱好者,大家好! 欢迎阅读有关使用适用于 windows 的节点版本管理器 (nvm) 的分步指南!如果您曾经面临过跨不同项目管理多个 node.js 版本的挑战,那么 nvm 就是您需要的工具。它简化了流程,让您可以轻松地在 node.js 版本之间切换并保持开发环境井井有条。 读完本…

    2025年12月19日
    000
  • Hacktoberfest week 1

    黑客活动的第一周是上周。我的第一次黑客啤酒节,我不会撒谎。我主要是紧张。虽然为开源项目做出贡献的概念令人兴奋,但在 4 周内做出 4 个开源贡献且难度不断增加有点令人生畏。 第一组是找到第一个问题(简单)。我不想粉饰它,与我的第一个公关相比,这是最难的部分。经过大量浏览才发现问题。由于大多数问题并不…

    2025年12月19日
    000
  • 如何开始 Web 开发

    介绍 Web 开发是当今最受欢迎的职业之一,对于那些对 前端(用户所看到的内容)和 后端(服务器逻辑)感兴趣的人来说)。如果您刚刚起步,想知道从哪里开始或者作为开发者可以赚多少钱,本指南将为您提供清晰的路径和入门资源。 什么是网页开发? 网络开发分为两大区域: 前端:网站的视觉和交互部分。包括: H…

    2025年12月19日
    000
  • 了解如何建立实时聊天

    在本教程中,我们将指导您使用 superviz 构建实时聊天应用程序。实时聊天是现代 web 应用程序的一项重要功能,它使用户能够即时相互通信。无论您是在构建协作平台、客户支持工具还是社交网站,添加实时聊天都可以增强用户交互和参与度。 我们将演示如何设置一个简单的聊天界面,参与者可以在其中实时发送和…

    2025年12月19日
    000
  • React Native 入门 (EXPO):初学者指南

    react native 已成为构建移动应用程序最流行的框架之一,使开发人员能够使用 javascript 和 react 为 ios 和 android 创建跨平台应用程序。 expo 通过提供一组工具和服务来简化 react native 开发,帮助您快速构建原型、构建和部署 react nat…

    2025年12月19日
    000
  • 想开始使用开源吗?加入 Meteorjs Hacktoberfest 4!

    各位,又到了十月! 这意味着 Hacktoberfest 又回来了。每年十月,这个令人难以置信的活动都会庆祝开源的魔力。这是一场全球性的盛会,邀请各行各业的开发人员卷起袖子,做出贡献。这是您加入开源世界并留下您的印记的机会。那么,让我们开始吧! 我们选择了一些可以发挥您的脑力和创造力的问题。我们将为…

    2025年12月19日
    000
  • 使用 Expo 探索 React Native 导航:完整指南

    在不同屏幕之间导航是移动应用程序开发的一个重要方面。使用 expo 和 react native 构建应用程序时,选择正确的导航库对于确保无缝的用户体验至关重要。本指南将探讨 expo 提供的最流行的导航选项、如何设置它们以及有效实施导航的最佳实践。 react native 中的导航概述 在 re…

    2025年12月19日
    000
  • [已解决] Appwrite 用户角色缺失或缺失范围错误

    如果您想快速构建应用程序,appwrite 是一个很棒的工具,但有时您可能会遇到令人沮丧的错误,对我来说,这些错误总是关于“用户角色缺失”或“用户无权执行此操作”等即使我可以完全访问我的应用程序的任何实例,执行任何操作。 但最终我找到了解决所有问题的方法(也许不是全部,但我想这样认为)。 所以这篇不…

    2025年12月19日
    000
  • js如何获得加密

    如何用 JavaScript 获取加密功能?有三种方法:使用 Crypto API:生成密钥并导出为 base64 编码的字符串。使用第三方库:CryptoJS[sodium.js] 等库提供加密算法和便捷 API。使用在线服务:使用 AWS KMS、Google Cloud KMS 或 Azure…

    2025年12月19日
    000
  • 如何手写一个js编辑器

    可以通过以下步骤创建手写 JavaScript 编辑器:创建一个文本编辑器启用语法高亮添加代码自动完成实现错误检查添加调试器提供代码格式化添加可选功能使用自定义编辑器进行编码 如何手写一个 JavaScript 编辑器 编写一个 JavaScript 编辑器可以通过以下步骤实现: 1. 创建一个文本…

    2025年12月19日
    000
  • js如何去取两位小数

    在 JavaScript 中,获取两位小数的方法包括:使用 toFixed() 方法返回一个指定小数位数的字符串。使用 Number.prototype.toLocaleString() 方法指定 {minimumFractionDigits: 2} 选项格式化为两位小数。使用自定义函数 toFix…

    2025年12月19日
    000
  • 前端js如何格式化日期

    在前端 JavaScript 中,有以下方法可以格式化日期:使用 toLocaleDateString(),格式化日期部分,如:”2023-03-08″。使用 toLocaleTimeString(),格式化时间部分,如:”10:34:25″。使用 t…

    2025年12月19日
    000
  • 如何在线运行js代码

    在没有服务器端环境的情况下运行 JavaScript 代码,可以使用在线代码编辑器和运行环境,如 CodePen、JS Bin 和 JS Fiddle,或代码托管平台,如 GitHub Gist 和 Glitch,或浏览器开发者工具,如 Chrome 开发者工具和 Firefox 开发者工具。 如何…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信