实用指南:npm 包构建与发布
npm 包构建与发布
项目初始化
mkdir my-npm-package
cd my-npm-package
npm init -y # 或使用 npm init 创建交互式配置
npm init 用于初始化package.json,其中name设置就为后续发布的包名,version就是包的版本(正式 pulish 后续每次更新包都需要进行 version 更改才能发布)
项目构建
项目源码一般放在src/或者packages目录下,但CLI一般是放在bin/目录下,无论放在那个文件下,都需要在package.json中设置好主入口。
# package.json
# 对于CJS (CommonJS)
"main": "dist/index.js",
# 对于ESM (ECMAScript Modules)
"type": "module",
"exports": {
".": "./dist/index.js"
}
如果是TypeScript或者Babel需要添加构建流程
- 直接使用
tsc:
"scripts": {
"build": "tsc"
}
- 构建前删除前一次构建产物,利用库 rimraf:
npm install --save-dev rimraf
"clean": "rimraf dist build"
- 如果需编写工具包,且希望该包能在全局下运行,即可利用
npm i -g xx进行下载,并通过指令运行。
# package.json
"bin": {
"xx": "./dist/bin/index.js" // xx一般为包名
},
# index.js 开头需要添加
// #!/usr/bin/env node
本地测试
本地测试的方法主要有 软链接 和 真实构建包安装 两种方式
软链接
# 在目录包中执行
npm link
# 在另一个测试项目中
npm link my-npm-package
# 删除软链接
# 在使用项目下面(执行过 npm link 的地方)
npm unlink --no-save <你的包名># 完全删除全局命令npm unlink -g my-cli-demo 或 npm uninstall -g my-cli-demo# 检查 可以通过查看全局安装路径是否存在该软链接npm root -g
优势:
- 可以像安装普通 npm 包一样使用它来测试
- 在 link 后,源码修改后(如果是需要构建的需要重新构建),其它地方 link 该包的会自动更新为最新代码。有可能存在未更新的情况,解决办法为:删除后重新建立连接即可。
缺点:
- 会与实际发布的包有差异,link 是文件系统的软链接,一些路径相关、依赖解析、Node模块嵌套结构行为会不一样。
- 直接使用源码,依赖可能未被打包
- 未测试
.npmignore/files字段,本地 link 并不会排除.npmignore或package.json中的files字段 - 无法完全真实模拟发布的包
真实安装包
本地打包并测试安装
# 包目录下
npm pack # 会打包出一个 .tgz 文件
# 其它项目使用
npm install ../path/to/my-npm-package-1.0.0.tgz
发布到 npm 私有测试版本
package.json设置{version": "0.1.0-beta.1" }。- 发布
npm publish --access restricted发布到npm的测试环境 - 测试
npm install your-package@0.1.0-beta.1
这个比较适合团队协同测试。
发布到 npm
注册 npm 账户
检查包名是否可用
npm search your-package-name,或者访问 https://www.npmjs.com/package/your-package-name添加
.npmignore,避免发布测试文件、源码等,常见配置如下:
src/
node_modules/
tests/
*.test.js
登录当前源
npm login或者npm login --registry https://registry.npmjs.org/登录指定的源发布
npm publish当前的镜像源或者npm publish --registry https://registry.npmjs.org/发布到指定源如果在 Publish 前需要进行特定的处理,则需配置命令,下面命令实现了在每次发布前进行清理和构建操作。
"prepack": "npm run clean && npm run build"
发布检查
- 进入官网查看自己的packages是否能显示该包
- 下载包进行测试
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/945457.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
2025修护/二硫化硒去屑/香氛/控油蓬松/洗发水品牌推荐榜:MASIL 玛丝兰(西安悦己容)五星领衔,这些专研洗护品牌值得关注
在洗护市场愈发注重 “专业养护” 的 2025 年,兼具技术实力与用户口碑的洗发水品牌成为主流选择。以下推荐榜基于企业真实实力与产品定位筛选,为消费者提供客观参考。
西安悦己容生物科技有限责任公司(MASIL 玛丝兰…
2025年Q345B/20G/5310/无缝钢管 高压/5310高压/6479高压合金管推荐榜:天津大无缝五星领跑,这些品质流通企业适配工业需求
2025 年工业制造、能源输送等领域对无缝钢管、合金管的品质稳定性与供应效率要求持续提升,一批兼具资源整合能力与服务意识的企业凸显,以下推荐榜基于真实经营实力筛选,供采购参考。
天津大无缝联合钢铁有限公司 �…
2025年保险法律服务律所推荐:拒赔点外险保险律师聚焦专业与实战能力的权威之选
随着保险产品日益多元,理赔纠纷、条款争议等问题频发,选择专业的保险法律服务机构成为化解矛盾的关键。基于案件胜诉率、领域专注度、服务覆盖范围等核心维度,结合行业实践与客户反馈,现梳理出值得关注的保险律师事…
vue3+vite学习日记之配置全新项目
一、先创建项目并进行一些安装配置
1、npm create vite@latest ->输入项目名称->选择vue->选择ts->根据提示进行 2、安装vue-router,输入命令npm install vue-router@4 -s
3、安装element-plus,输入命令…
2025 全案/VI/品牌设计公司服务商推荐:意识形体(上海意感)五星领跑,这些专注视觉价值的公司值得选
在商业竞争愈发依赖 “视觉话语权” 的当下,品牌设计成为传递品牌内核、激活用户连接的关键。2025 年,一批以专业设计能力驱动品牌成长的服务商凸显,以下推荐榜聚焦真实实力,为品牌方提供参考。
上海意感品牌形象策…
2025 年水泥房厂家联系方式推荐,内蒙古蒙营新型建材提供预制水泥房及配套产品专业解决方案
行业背景
随着我国城镇化进程的推进和建筑行业工业化转型加速,预制水泥制品凭借施工效率高、质量稳定、节能环保等优势,在市政建设与民用建筑领域的应用愈发广泛。其中,预制水泥房因具备组装便捷、空间利用率高、使…
一网统管,智慧赋能:国标GB28181算法算力平台EasyGBS构建城市交通可视、巡检与指挥新范式
一网统管,智慧赋能:国标GB28181算法算力平台EasyGBS构建城市交通可视、巡检与指挥新范式一、方案背景
人车暴涨,路口告急:高峰堵、事故慢、取证难,老办法已拖不动城市交通。破局之道,先看摄像头——国标GB28181算…
YouTube数据抓取漏洞利用与概念验证解析
本文详细解析了YouTube数据抓取概念验证项目的技术实现,包括Python代码编写、GitHub CoPilot辅助开发、YouTube API数据采集以及CSV文件生成等关键技术细节,展示了完整的数据抓取技术架构。https://sploitus.com/exp…
2025 年检查井厂家联系方式推荐,内蒙古蒙营新型建材提供专业检查井解决方案与可靠产品供应
在当前市政建设与民用建筑快速发展的背景下,检查井作为排水、电力、通信等系统的关键配套设施,其质量与供应稳定性直接影响工程整体质量和使用寿命。随着行业对检查井的规格标准化、性能可靠化要求不断提升,市场对专…
oracle 控制文件
1、查看控制文件SQL> show parameter controlNAME TYPE VALUE------------------------------------ ----------- ------------------------------control_file_record_kee…
iOS 26 查看电池容量与健康状态 多工具组合的工程实践
本文聚焦 iOS 26 查看电池容量与健康状态,介绍如何结合 KeyMob(克魔)、iMazing、Xcode Instruments、Console 等工具,建立多层监控体系,分析电池容量、循环次数、能耗趋势、App 功耗分布与版本差异,实现系统化的…
完整教程:数据类型和变量1
完整教程:数据类型和变量1pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …
2025年苏州中式秀禾服婚纱照公司权威推荐榜单:海边婚纱照/园林婚纱照/旅拍婚纱照源头公司精选
传统与时尚的完美融合,苏州秀禾服婚纱照正成为新人的文化新宠。
中式秀禾服婚纱照以其吉祥寓意与精致工艺,正成为苏州婚纱摄影市场的新趋势。据《2025苏州婚庆行业白皮书》数据显示,每年约有12万对新人在苏州拍摄婚…
mssqsl靶机的sa权限sql注入-cnblog
靶机系统 windows server 2025
数据库 Microsoft sql server 2022
服务器 Internet Information Services (IIS) 10最关键的一点 在sql注入中 我们将用xp_cmdshell创建一个用户 这就要求sqlserver服务用管理员账户登录…
国产9GHz宽带巴伦HT-BAL-0009SMG实测反馈——pin-to-pin替代海外料,EVM直接降4个点
国产9GHz宽带巴伦HT-BAL-0009SMG实测反馈——pin-to-pin替代海外料,EVM直接降4个点仪表实测
网络分析仪扫零点到九千兆,回波全程大于十二分贝,插损低于三点五分贝。相位平衡实测正负零点六度,幅度平衡零点一二分贝…
Python---合成视频不能正常播放的原因
在使用Python进行视频快速合并的时候,如果视频的编码格式、码率等这些不一致,就会导致合并的视频:播放异常。
提问豆包AI:结果:使用 ffmpeg 的 -c copy(流复制)模式快速拼接视频时,出现音频静音、播放速度异常…
ARM GNU 汇编中 .section 的起始终止 - ENGINEER
ARM GNU 汇编中 .section 的起始终止一 规则概览每个 .section 指令开启一个新段,段的“起点”就是该指令出现的位置。段的“终点”是下一个 .section 指令或源文件末尾;不需要、也没有单独的“结束伪指令”…
Java使用Selenium自动化测试网盘链接是否失效
欢迎来到我的小屋1、使用依赖<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.4.0</version></dependency&…
AI元人文:意识间的通讯
AI元人文:意识间的通讯
引言
当前人工智能发展面临根本性局限:大语言模型虽具备强大的知识存储和处理能力,却始终处于被动应答状态。它们能够精准回应指令,却无法主动发起对话;能够复现已有知识,却难以创造新的认…
谁在领跑AI客服赛道?2025年中国客服系统排行榜深度分析
在大模型技术全面渗透的 2025 年,AI 客服已从简单的 "问答工具" 升级为企业的 "数字服务员工",成为降本增效与体验升级的核心引擎。据行业数据显示,部署成熟 AI 客服系统的企业平均降低 40% 服…