煙臺(tái)網(wǎng)站建設(shè)-中國互聯(lián)看seo
如果你負(fù)責(zé)前端的基礎(chǔ)能力建設(shè),發(fā)布各種功能/插件包猶如家常便飯,所以熟悉對(duì) npm 包的發(fā)布與管理是非常有必要的,故此有了本篇總結(jié)文章。本篇文章一方面總結(jié),一方面向社區(qū)貢獻(xiàn)開箱即用的 npm 開發(fā)、編譯、發(fā)布、調(diào)試模板,希望幫助到有需要的同學(xué)。
辛苦整理良久,還望手動(dòng)點(diǎn)贊鼓勵(lì)~
npm sdk 模板倉庫為:https://github.com/fengshi123/npm-sdk
博客 github地址為:https://github.com/fengshi123/blog ,匯總了作者的所有博客,歡迎關(guān)注及 star ~
一、初始化 npm 包
1.1、初始化 npm 項(xiàng)目
根據(jù)以下命令能初始化一個(gè) npm 包項(xiàng)目,命令交互過程中會(huì)讓你填入 項(xiàng)目名稱、版本、作者等信息,可以直接回車跳過(使用默認(rèn)設(shè)置)
npm init --save
1.2、包權(quán)限管理
很多時(shí)候,一個(gè)項(xiàng)目包往往不只是你一個(gè)人在管理的,這時(shí)需要給其他一起維護(hù)的同學(xué)開通發(fā)布的權(quán)限,相關(guān)使用命令如下:
# 查看模塊 owner, 其中 demo 為模塊名稱
$ npm owner ls demo# 添加一個(gè)發(fā)布者, 其中 xxx 為要添加同學(xué)的 npm 賬號(hào)
$ npm owner add xxx demo# 刪除一個(gè)發(fā)布者
$ npm owner rm xxx demo
1.3、發(fā)布版本
1.3.1、發(fā)布穩(wěn)定版本
更新版本號(hào)共有以下選項(xiàng)(major | minor | patch | premajor | preminor | prepatch | prerelease) ,注意項(xiàng)目的git status 必須是clear,才能使用這些命令。
# major 主版本號(hào),并且不向下兼容 1.0.0 -> 2.0.0
$ npm version major# minor 次版本號(hào),有新功能且向下兼容 1.0.0 -> 1.1.0
$ npm version minor# patch 修訂號(hào),修復(fù)一些問題、優(yōu)化等 1.0.0 -> 1.0.1
$ npm version patch# premajor 預(yù)備主版本 1.0.0 -> 2.0.0-0
$ npm version premajor# preminor 預(yù)備次版本 1.0.0 -> 1.1.0-0
$ npm version major# prepatch 預(yù)備修訂號(hào)版本 1.0.0 -> 1.0.1-0
$ npm version major# prerelease 預(yù)發(fā)布版本 1.0.0 -> 1.0.0-0
$ npm version major
版本號(hào)更新后,我們就可以進(jìn)行版本的發(fā)布
$ npm publish
1.3.2、預(yù)發(fā)布版本
很多時(shí)候一些新改動(dòng),并不能直接發(fā)布到穩(wěn)定版本上(穩(wěn)定版本的意思就是使用 npm install demo 即可下載的最新版本),這時(shí)可以發(fā)布一個(gè) “預(yù)發(fā)布版本“,不會(huì)影響到穩(wěn)定版本。
# 發(fā)布一個(gè) prelease 版本,tag=beta
$ npm version prerelease
$ npm publish --tag beta
比如原來的版本號(hào)是?1.0.1,那么以上發(fā)布后的版本是?1.0.1-0,用戶可以通過?npm install demo@beta? 或者?npm install demo@1.0.1-0? 來安裝,用戶通過 npm install demo 安裝的還是 1.0.1 版本。
1.3.3、將 beta 版本設(shè)置為穩(wěn)定版本
# 首先可以查看當(dāng)前所有的最新版本,包括 prerelease 與穩(wěn)定版本
$ npm dist-tag ls# 設(shè)置 1.0.1-1 版本為穩(wěn)定版本
$ npm dist-tag add demo@1.0.1-1 latest
這時(shí)候,latest 穩(wěn)定版本已經(jīng)是?1.0.1-1?了,用戶可以直接通過?npm install demo?即可安裝該版本。
1.3.4、將 beta 版本移除
# 將 beta 版本移除
$ npm dist-tag rm demo beta
1.3.5、將 tag 推送到 Git 遠(yuǎn)程倉庫中
# 當(dāng)我們發(fā)布完對(duì)應(yīng)的版本,可以通過以下命令將版本號(hào)推送到遠(yuǎn)程倉庫, 其中 xxx 為對(duì)應(yīng)分支
$ git push origin xxx --tags
1.4、查看版本信息
可以通過?npm info?來查看模塊的詳細(xì)信息。
$ npm info
二、使用 typescript
2.1、安裝 typescript 作為開發(fā)階段的依賴項(xiàng)
$ npm i typescript -D
2.2、增加配置文件 tsconfig.json
在根目錄新建 tsconfig.json,配置項(xiàng)具體的意義可以參考 ts 官方文檔
{"version": "1.8.0","compilerOptions": {"outDir": "build/compiled","lib": [ "es6" ],"target": "es5","module": "commonjs","moduleResolution": "node","emitDecoratorMetadata": true,"experimentalDecorators": true,"sourceMap": true,"noImplicitAny": true,"declaration": true},"exclude": [ "build", "node_modules" ]
}
2.3、安裝 @types/node
安裝 @types/node 讓 node 的核心包具備類型提示
$ npm i @types/node -D
2.4、新建入口文件
在根目錄新建 src 目錄,用于存放所有的 TypeScript 源文件,然后在 src 下新建 index.ts 作為入口文件
// src/index.tsconsole.log('hello npm-sdk!');
2.5、安裝 ts-node-dev
在開發(fā)階段為了能直接執(zhí)行并且監(jiān)聽 ts 文件的變化,安裝 ts-node-dev
$ npm i ts-node-dev -D
在 package.json 中定義一個(gè)啟動(dòng)腳本
"scripts": {"start": "ts-node-dev --respawn --transpile-only src/index.ts"
}
這樣我們就可以實(shí)時(shí)進(jìn)行編譯,如下所示
?
三、使用 eslint 校驗(yàn)
3.1、安裝 eslint
$ npm i eslint -D
3.2、eslint 初始化
$ ./node_modules/.bin/eslint --init
根據(jù)交互命令提示對(duì)應(yīng)生成配置文件如下所示,可以根據(jù)團(tuán)隊(duì)的代碼風(fēng)格進(jìn)行對(duì)應(yīng)的配置 .eslintrc.js
module.exports = {env: {browser: true,es2021: true},extends: ['standard'],parser: '@typescript-eslint/parser',parserOptions: {ecmaVersion: 13,sourceType: 'module'},plugins: ['@typescript-eslint'],rules: {}
}
3.3、添加忽略文件 .eslintignore
node_modules/
3.4、script 命令配置
可以通過在 package.json 中配置對(duì)應(yīng)的校驗(yàn)命令和修復(fù)命令,如下所示
"scripts": {"lint": "eslint --ext .ts .","lint:fix":"eslint --fix --ext .ts ."},
3.5、提交校驗(yàn)
利用 commitlint 和 husky 工具進(jìn)行代碼提交時(shí)攔截驗(yàn)證,安裝如下
$ npm i @commitlint/cli @commitlint/config-conventional husky lint-staged --D
在 package.json 中進(jìn)行對(duì)應(yīng)的配置,當(dāng) commit 代碼時(shí),如果代碼中存在 eslint 錯(cuò)誤,那么就會(huì)進(jìn)行報(bào)錯(cuò)提示
"husky":{"hooks":{"pre-commit":"lint-staged","commit-msg":"commitlint -e $HUSKY_GIT_PARAMS"},"lint-staged":{".ts":["eslint --fix"]},"commitlint":{"extends":["@commitlint/config-conventional"]}},
四、編譯
我們可以增加對(duì)應(yīng)的 typescript 編譯命令,如下所示
"scripts": {"build:cjs": "tsc --outDir lib","build:es": "tsc -m esNext --outDir esm","build": "rd /s /q lib esm && npm run build:cjs && npm run build:es",
},
配置對(duì)應(yīng)的入口地址,其中 module 和 main 的區(qū)別是,module 主要在 tree shaking 時(shí)會(huì)用到。
"main": "lib/index.js","module": "esm/index.js",
五、本地調(diào)試
可以通過 npm link 在正式項(xiàng)目中進(jìn)行調(diào)試,在我們的包目錄中安裝完發(fā)布的線上包后,可以執(zhí)行以下命令將當(dāng)前項(xiàng)目 node_modules 底下安裝的對(duì)應(yīng)包關(guān)聯(lián)到本地全局 npm 目錄的 node_modules 目錄下,命令如下
$ npm link npm-sdk@1.0.1-0
執(zhí)行命令如下所示
然后在對(duì)應(yīng)的 npm sdk 目錄下進(jìn)行關(guān)聯(lián)
$ npm link// 關(guān)聯(lián)成功后如下所示
D:\nvm\npm\node_modules\npm-sdk -> F:\all_project\npm-sdk
到這里,通過以上兩個(gè)步驟的關(guān)聯(lián),將項(xiàng)目中使用到的 sdk 包,關(guān)聯(lián)到該 sdk 包對(duì)應(yīng)的開發(fā)目錄,我們就可以在本地對(duì) sdk 包進(jìn)行調(diào)試。
六、總結(jié)
本文從 npm 各種常用命令、到 sdk 中使用 typescript、以及使用 eslint 強(qiáng)校驗(yàn)、再到編譯/本地調(diào)試,從零到一演示如何搭建發(fā)布一個(gè) NPM 包,NPM SDK 模板倉庫為:https://github.com/fengshi123/npm-sdk,有需要的同學(xué)可以直接 clone 進(jìn)行使用。
博客 github地址為:https://github.com/fengshi123/blog ,匯總了作者的所有博客,歡迎關(guān)注及 star ~
?
?
?
?
?