nodejs打包作為公共包使用的完整流程
前言
面給出一份「從 0 到 1」把 Node.js 代碼打包并發(fā)布為公共 npm 包的完整流程,全部步驟均來(lái)自 2024-2025 年最新社區(qū)實(shí)踐,可直接照做。
(如只想打綠色可執(zhí)行文件而不發(fā)布,可跳到最后「附:PKG 綠色可執(zhí)行包」小節(jié))
一、前置準(zhǔn)備
安裝 Node.js ≥ 14(推薦 18 LTS)
注冊(cè) npm 賬號(hào) → https://www.npmjs.com/signup
本地登錄
npm login # 按提示輸入賬號(hào)、密碼、郵箱 npm whoami # 驗(yàn)證是否登錄成功
二、創(chuàng)建與編碼
新建文件夾并初始化
mkdir my-utils # 包名僅作示例 cd my-utils npm init -y # 生成默認(rèn) package.json
修改
package.json(關(guān)鍵字段){ "name": "my-utils", // 全網(wǎng)唯一,可先去 npm 搜索確認(rèn) "version": "1.0.0", "description": "常用工具函數(shù)", "main": "dist/index.js", // CommonJS 入口 "module": "dist/index.mjs", // ESModule 入口(可選) "files": ["dist"], // 只發(fā)布 dist 目錄 "scripts": { "build": "tsup src/index.ts --format cjs,esm --dts", "prepublishOnly": "npm run build" }, "keywords": ["utils", "tool"], "author": "your-name <you@example.com>", "license": "MIT", "repository": { "type": "git", "url": "https://github.com/yourname/my-utils.git" } }業(yè)務(wù)代碼
src └── index.ts
示例
src/index.tsexport const sleep = (ms: number) => new Promise<void>(r => setTimeout(r, ms));
安裝打包工具(零配置,2024 最流行)
npm i -D tsup typescript @types/node
三、一鍵構(gòu)建
npm run build
生成 dist/ 目錄,里面同時(shí)出現(xiàn)
index.js→ CommonJSindex.mjs→ ESModuleindex.d.ts→ 類型聲明
四、本地“白嫖”測(cè)試(可選)
把包鏈到全局
npm link
在任意項(xiàng)目里
npm link my-utils
使用
const { sleep } = require('my-utils'); (async () => { await sleep(1000); console.log('ok'); })();
五、發(fā)布公共包
確保包名全局唯一(去 https://www.npmjs.com/search 搜一下)
發(fā)布
npm publish --access public
成功后會(huì)收到 npm 官方郵件;隨后任何人可
npm i my-utils
六、常見(jiàn)踩坑提醒
表格
復(fù)制
| 問(wèn)題 | 解決方案 |
|---|---|
| 名字重復(fù) | 提前搜索,或加 scope: @yourname/utils 發(fā)布時(shí)同樣 npm publish --access public |
| 私有包收費(fèi) | 公共包不要用 @scope/pkg 除非加 --access public |
| 忘記構(gòu)建 | 用 prepublishOnly 鉤子,每次 npm publish 前自動(dòng) npm run build |
| 二進(jìn)制文件 | 如果包內(nèi)含原生 .node 文件,需在不同平臺(tái)分別 prebuild 或使用 @mapbox/node-pre-gyp |
附:PKG 綠色可執(zhí)行包(可選,不發(fā)布 npm 也能用)
安裝
npm i -g pkg
在
package.json里增加"bin": "dist/cli.js", "pkg": { "targets": ["node18-win-x64", "node18-linux-x64", "node18-macos-x64"], "outputPath": "release" }打包
pkg . --compress Brotli
得到
release/目錄下的綠色可執(zhí)行文件,無(wú) Node 環(huán)境也能運(yùn)行。
完成!現(xiàn)在你已經(jīng)同時(shí)擁有
一個(gè)可
npm i xxx安裝的公共包;一份可選的綠色可執(zhí)行文件用于離線分發(fā)。
如需繼續(xù)補(bǔ)充「CI 自動(dòng)發(fā)布」「語(yǔ)義化版本」「雙模塊(CommonJS + ESM)兼容」等進(jìn)階主題。
總結(jié)
到此這篇關(guān)于nodejs打包作為公共包使用的文章就介紹到這了,更多相關(guān)nodejs打包公共包使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
NodeJs的fs讀寫(xiě)刪除移動(dòng)監(jiān)聽(tīng)
這篇文章主要介紹了NodeJs的fs讀寫(xiě)刪除移動(dòng)監(jiān)聽(tīng),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-04-04
Nodejs中使用phantom將html轉(zhuǎn)為pdf或圖片格式的方法
這篇文章主要介紹了Nodejs中使用phantom將html轉(zhuǎn)為pdf或圖片格式的方法,需要的朋友可以參考下2017-09-09
30分鐘用Node.js構(gòu)建一個(gè)API服務(wù)器的步驟詳解
這篇文章主要介紹了30分鐘用Node.js構(gòu)建一個(gè)API服務(wù)器的步驟詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
node.js讀取Excel數(shù)據(jù)(下載圖片)的方法示例
這篇文章主要給大家介紹了關(guān)于node.js讀取Excel數(shù)據(jù)(下載圖片)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用node.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08
Linux下為Node.js程序配置MySQL或Oracle數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了Linux下為Node.js程序配置MySQL或Oracle數(shù)據(jù)庫(kù)的方法,這里默認(rèn)已經(jīng)裝配好了Node環(huán)境然后我們利用npm包管理工具來(lái)進(jìn)行配置,需要的朋友可以參考下2016-03-03
Nodejs 中的 Buffer 類的創(chuàng)建與基本使用
這篇文章主要為大家介紹了Nodejs中Buffer的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10

