開發 npm 包【詳細教程】(含發布 npm 包,版本號升級,修改包后重新發布等)

1. 給 npm 包取個【唯一】的名字!

npm 包命名規范

  • 只能包含小寫字母(a-z)、數字(0-9)、連字符(-) 和 下劃線(_),不能包含空格、大寫字母、標點符號(除連字符和下劃線外)或特殊字符(如 !、@、# 等)
  • 長度不超過 214 個字符
  • 建議以字母開頭
  • 連字符(-)常用于分隔單詞(如 react-dom),下劃線(_)使用較少,避免連續使用連字符或下劃線(如 my–package 不推薦)
  • 名稱應簡潔易記,體現包的具體功能
  • 避免禁用的名稱,如 fs、npm、package、install、publish 等

范圍包

包名格式如下的為范圍包,適合個人或企業發布的系列包,如 @vue/cli 等

@scope/package-name
  • scope 是npm 用戶名或組織名

在發布時,默認為私有范圍包(僅自己或授權用戶可見,且需要付費),可指定為公共范圍包(所有人可見可安裝,免費)

npm publish --access public

檢驗包名是否唯一

npm search 包名

或在 npm官網 中搜索試試

在這里插入圖片描述

2. 創建項目

推薦的項目目錄結構

package-name/
├── package.json          # 包核心配置(必選)
├── README.md             # 包說明文檔(必選)
├── LICENSE               # 開源許可證(推薦)
├── CHANGELOG.md          # 版本變更記錄(推薦)
├── .gitignore            # Git 忽略文件
├── .npmignore            # npm 發布忽略文件(可選,默認繼承.gitignore)
├── tsconfig.json         # TypeScript 配置(如使用 TS)
├── src/                  # 源代碼目錄(核心邏輯)
│   ├── index.js          # 入口文件(導出核心功能)
│   ├── utils/            # 工具函數/輔助模塊
│   ├── core/             # 核心業務邏輯
│   ├── types/            # 類型定義(如使用 TS 或 JSDoc)
│   └── constants/        # 常量定義
├── dist/                 # 編譯/打包后的輸出目錄
│   ├── index.js          # 編譯后的入口文件
│   ├── index.cjs         # CommonJS 版本(如支持雙模塊)
│   └── index.mjs         # ES 模塊版本(如支持雙模塊)
├── test/                 # 測試目錄
│   ├── unit/             # 單元測試
│   ├── integration/      # 集成測試
│   └── fixtures/         # 測試用例數據
├── docs/                 # 詳細文檔(可選)
├── examples/             # 使用示例(可選)
└── scripts/              # 輔助腳本(如構建、發布腳本)
  • 小型包可簡化結構(如省略 core/、docs/ 等目錄)。
  • 前端工具包可能需要 browser/ 目錄區分瀏覽器環境代碼。
  • 命令行工具需在 package.json 中配置 bin 字段,并在 src/ 中添加 CLI 入口。

使用 vite 的庫模式開發

因 vite 并沒有提供現成簡易的模板,建議按下文的方式創建項目

以包名 @ecclub/util 為例,創建文件夾 “util” ,內部目錄結構為:

在這里插入圖片描述

具體代碼如下:

src/index.ts

按需改成任意業務代碼,但一定要用 export 對外導出!

export function sum(a: number, b: number) {return a + b;
}

.gitignore

node_modules/
dist/

package.json

需自定義的字段有:

  • name 包的名稱
  • description 包的描述
  • keywords 包的關鍵詞數組
  • author 包的作者

相關的依賴根據需要添加,已添加的依賴可以考慮升級到最新版

{"name": "@ecclub/util","version": "1.0.0","type": "module","description": "EC編程俱樂部開發的工具庫","main": "./dist/index.umd.cjs","module": "./dist/index.js","types": "./dist/index.d.ts","files": ["dist","index.d.ts"],"scripts": {"build": "tsc && vite build"},"keywords": ["util"],"author": "朝陽 <603092378@qq.com>","license": "MIT","devDependencies": {"typescript": "~5.9.2","vite": "^7.0.6","vite-plugin-dts": "^4.5.4"}
}

tsconfig.json

基本無需更改,可根據需要添加 ts 配置

{"compilerOptions": {"target": "es2022","useDefineForClassFields": true,"module": "esnext","lib": ["ES2022", "DOM", "DOM.Iterable"],"skipLibCheck": true,/* Bundler mode */"moduleResolution": "bundler","allowImportingTsExtensions": true,"isolatedModules": true,"moduleDetection": "force","noEmit": true,/* Linting */"strict": true,"noUnusedLocals": true,"noUnusedParameters": true,"noFallthroughCasesInSwitch": true,"noUncheckedSideEffectImports": true},"include": ["src"]
}

vite.config.ts

基本無需更改,可根據需要添加 vite 配置

import { defineConfig } from "vite";
import dts from "vite-plugin-dts";export default defineConfig({build: {lib: {entry: "./src/index.ts",name: "index",fileName: "index",},},plugins: [dts({// 生成類型聲明文件insertTypesEntry: true,}),],
});

使用 npm 開發

以包名 mypack-test 為例

  1. 新建文件夾 mypack-test

  2. 用vscode 打開文件夾 mypack-test

  3. 終端執行 npm init 生成 package.json 文件,按提示輸入相關信息或一路回車,最后輸入 y 回車即可。
    在這里插入圖片描述
    藍框內的部分為包的信息,可根據需要自行輸入(或等生成package.json后再修改)

    package.json 中各字段的含義詳見
    https://blog.csdn.net/weixin_41192489/article/details/150345315

  4. 新建文件index.js,內容為
    要點:定義的函數/變量一定要對外導出!

    /*函數功能——求和參數——兩個數字
    */
    function sum(a, b) {return a + b;
    }module.exports = {sum: sum,
    };
  5. 新建文件README.md,內容為包相關的信息

  6. 新建文件 .npmignore,內容為發布時不需要打包的文件,如

    node_modules
    *.log
    

3. 打包項目

若使用 npm 開發則跳過此步

此處以 vite 庫模式開發為例:

先安裝依賴

npm i

再執行打包腳本

在這里插入圖片描述
得到

在這里插入圖片描述

4. 發布 npm 包

先檢查 npm 的下載源是否為官方源,若不是,則需重新設置為官方源

npm config set registry https://registry.npmjs.org/

注冊 npm 賬號

npm adduser

或者直接去官網注冊 https://www.npmjs.com/

登錄 npm 賬號

npm login

在這里插入圖片描述
按提示按下 Enter 后,會用瀏覽器打開 npm 官網進行登錄

在這里插入圖片描述
輸入賬號密碼后,點擊登錄按鈕

在這里插入圖片描述
輸入注冊 npm 賬號時綁定的郵箱中收到的一次性驗證碼后點擊登錄按鈕

在這里插入圖片描述
回到命令行,可見已完成登錄

在這里插入圖片描述

發布非范圍包

npm publish

發布范圍包

需先在 npm 官網創建組織

在這里插入圖片描述
在這里插入圖片描述
輸入自定義的組織名(需全網唯一)后點擊 Create 按鈕

創建成功后,可見

在這里插入圖片描述
在 package.json 中,我們定義的包名為

  "name": "@ecclub/util",

現在可以發布包啦!

npm publish --access public

驗證是否發布成功

方法一:在官網(按最新發布)搜索包名
在這里插入圖片描述
方法二:用命令行驗證

npm view @ecclub/util

在這里插入圖片描述

方法三:安裝包試用

npm i @ecclub/util

頁面中使用

import { sum } from "@ecclub/util";console.log(sum(1, 2)); // 得到 3

5. 修改 npm 包后重新發布

打包項目

同第 3 步

更新版本號

  • 修復bug,例如 1.0.0 → 1.0.1
npm version patch
  • 新增功能,例如 1.0.1 → 1.1.0
npm version minor   
  • 不兼容舊版本的更新,需升級主版本,如 1.1.0 → 2.0.0
npm version major

可見 package.json 中版本號發生了變化

  "version": "1.2.0",

(也可不執行命令,直接手動修改 package.json 中的版本號)

發布修改后的 npm 包

同第 4 步

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93036.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93036.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93036.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Secure 第三天作業

實驗需求&#xff1a;1.參考以上拓撲所示&#xff0c;完成以下需求&#xff1a;1&#xff09; 配置各設備 IP 地址2&#xff09; 配置 ZBFW&#xff0c;Inside-1 和 nside-2 屬于內部 Zone&#xff0c;Outside-1 屬于外部 Zonezone security insidezone security outsidezone-p…

Linux應用層-5.計算機網絡(菜鳥學習筆記)

計算機網絡的核心是連接與通信&#xff0c;從底層的物理信號到上層的應用服務&#xff0c;各層協議協同工作---------------------------------------------------------------------------------------一.計算機網絡分類&#xff08;按范圍&#xff09;1?個人區域網&#xff…

[論文閱讀] 人工智能 + 軟件工程 | 大型語言模型對決傳統方法:多語言漏洞修復能力大比拼

大型語言模型對決傳統方法&#xff1a;多語言漏洞修復能力大比拼 論文閱讀&#xff1a;On the Evaluation of Large Language Models in Multilingual Vulnerability RepairarXiv:2508.03470 On the Evaluation of Large Language Models in Multilingual Vulnerability Repair…

計算機網絡2-3:傳輸方式

目錄 串行傳輸和并行傳輸 同步傳輸和異步傳輸 單工、半雙工以及全雙工通信 總結 串行傳輸和并行傳輸 并行傳輸的優點是速度為串行傳輸的n倍&#xff0c;但也存在一個嚴重的缺點即成本高 同步傳輸和異步傳輸 單工、半雙工以及全雙工通信 總結

文檔生成PPT軟件哪個好?深度測評8款word轉ppt生成工具

在日常辦公與教學場景中&#xff0c;如何高效地將Word文檔內容轉化為專業PPT&#xff0c;一直是職場人士、教育工作者及內容創作者的共同痛點。隨著AI技術的普及&#xff0c;一鍵式轉換工具應運而生&#xff0c;它們不僅能精準識別Word中的標題與段落結構&#xff0c;還能自動套…

Azimutt:一款免費開源的多功能數據庫工具

Azimutt 是一款支持數據庫設計、表結構探索與分析、數據查詢以及數據庫文檔生成功能的全棧工具。 Azimutt 是一個免費開源的項目&#xff0c;源代碼托管在 GitHub&#xff1a; https://github.com/azimuttapp/azimutt 功能特性 多數據庫支持&#xff1a;包括主流數據庫 MySQ…

智算賦能:移動云助力“世界一流數據強港”建設之路

2024年5月&#xff0c;某創新產業園區智算中心正式揭牌成立。臺下響起的掌聲不僅是對一個項目的祝賀&#xff0c;更是客戶對未來的期許—— 推動產業結構優化升級&#xff0c;領跑數字經濟轉型發展。5家500強企業、8家上市企業、17家獨角獸企業……該創新產業園區在成為“世界一…

達夢自定義存儲過程實現獲取表完整的ddl語句

--導出表的ddl CREATE OR REPLACE PROCEDURE show_create_table( db IN varchar(255), tb IN varchar(255)) ASsql1 text;ret text : ;cmt text :;sql2 text :; BEGINFOR WSX IN (select TABLEDEF(db,tb) as ddl from dual) LOOPret: ret||WSX.DDL;END LOOP;ret : ret||chr(10…

【ARM】keil提示UVISION: Error: Encountered an improper argument

1、 文檔目標 解決MDK退出debug模式后&#xff0c;提示UVISION: Error: Encountered an improper argument。 2、 問題場景 在退出Debug模式的時候&#xff0c;彈出提示窗口&#xff0c;提示&#xff1a;UVISION: Error: Encountered an improper argument。&#xff08;如圖…

【2025最新版】PDF24 Creator,PDF編輯,合并分割,格式轉換全能工具箱,本地離線版本,完全免費!

軟件介紹&#xff08;文末獲取&#xff09;這款軟件于1999年開發&#xff0c;至今已經有26年了&#xff0c;這26年里它都完全免費&#xff01;簡潔的操作界面&#xff0c;讓用戶輕松上手&#xff0c;高效完成 PDF 文件的處理&#xff0c;方便又實用。這次給大家帶來的是一個本地…

如何使用VLLM進行openai/gpt-oss系列推理與支持工具調用

OpenAI時隔6年再次推出開源模型gpt-oss系列&#xff0c;本次gpt-oss系列包含兩個模型gpt-oss-120b與gpt-oss-20b。由于模型原生支持一種新的量化技術MXFP4&#xff0c;所以模型的部署所需的顯存也顯著的降低。openai/gpt-oss-20b 只需要大概16GB的顯存openai/gpt-oss-120b 需要…

SVN 查看歷史信息

SVN 查看歷史信息 引言 Subversion&#xff08;簡稱SVN&#xff09;是一個開源的版本控制系統&#xff0c;廣泛應用于軟件開發中。查看SVN的歷史信息對于了解代碼變更、追蹤問題來源以及理解項目發展歷程具有重要意義。本文將詳細介紹如何在SVN中查看歷史信息。 SVN歷史信息概述…

vue+flask山西非遺文化遺產圖譜可視化系統

文章結尾部分有CSDN官方提供的學長 聯系方式名片 文章結尾部分有CSDN官方提供的學長 聯系方式名片 關注B站&#xff0c;有好處&#xff01;編號&#xff1a;F068 項目介紹&#xff1a; 本系統主要實現了以下功能&#xff1a; 非遺項目知識圖譜可視化 非遺項目可視化關鍵詞分析 …

Jetson NX Python環境搭建:使用APT輕松安裝NumPy, scikit-learn, OpenCV

引言 在NVIDIA Jetson NX等ARM架構的嵌入式AI板子上搭建Python開發環境&#xff0c;特別是安裝像NumPy、OpenCV這樣包含C/C底層代碼的科學計算庫時&#xff0c;經常會遇到編譯失敗、耗時過長或依賴沖突等問題。這些問題尤其在通過pip從源代碼編譯安裝時更為突出&#xff0c;例如…

Spring Boot項目中線程池的全面教程

一、線程池基礎概念與重要性1.1 為什么需要線程池在Spring Boot應用中&#xff0c;線程池是一種至關重要的并發編程工具&#xff0c;它通過??復用線程資源??顯著提升系統性能。主要優勢包括&#xff1a;??減少開銷??&#xff1a;避免頻繁創建和銷毀線程帶來的性能損耗?…

機器學習第八課之K-means聚類算法

目錄 簡介 一、K-means 的核心思想 二、K-means 聚類的工作流程 1. 確定聚類數量 K 2.初始化 K 個簇中心 3.簇分配&#xff1a;將數據點分配到最近的簇 4.更新簇中心&#xff1a;重新計算每個簇的中心 5.判斷是否收斂 6.輸出聚類結果 三、聚類效果評價方式 四、k-…

【P21】OpenCV Python——RGB和BGR,HSV和HSL顏色空間,及VScode中報錯問題解決

P21 1 RGB和BGR2 HSV和HSL&#xff0c;YUV2.1 HSV2.1. 色調H2.1.2 飽和度S2.1.3 明度V2.2 HSL2.3 YUV3 顏色空間轉換實戰4 VScode中報錯問題5 Windows 下 VScode 路徑格式&#xff08;VScode很強大&#xff0c;路徑格式寫法自由多樣&#xff09;RGB/BGR人眼識別的顏色 &#xf…

.NET 應用程序 Linux下守護進程腳本編寫

下面的腳本是生產可用&#xff0c;可靠的sh腳本&#xff0c;用于監控 .NET 應用程序并自動重啟。假如你打包發布到Linux的程序名稱為MyAspDemo&#xff1b;推薦打包模式為框架依賴&#xff1a;需要在Linux上安裝對應的donet版本&#xff1b;1.在Linux下新建一個文件&#xff0c…

圖論理論部分

旅游完回來繼續學習。 先來看一下圖論的理論部分&#xff0c;然后稍微做一下DFS的題目。 圖的基本概念 二維坐標中&#xff0c;兩點可以連成線&#xff0c;多個點連成的線就構成了圖。 當然圖也可以就一個節點&#xff0c;甚至沒有節點&#xff08;空圖&#xff09; 圖的種…

WebSocket集群方案解析與實現

一、WebSocket集群核心挑戰 1.1 關鍵問題分析 #mermaid-svg-gzRCTMr7wiVCokct {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-gzRCTMr7wiVCokct .error-icon{fill:#552222;}#mermaid-svg-gzRCTMr7wiVCokct .error-t…