如果你负责前端的基础能力建设,发布各种功能/插件包犹如家常便饭,所以熟悉对 npm 包的发布与管理是非常有必要的,故此有了本篇总结文章。本篇文章一方面总结,一方面向社区贡献开箱即用的 npm 开发、编译、发布、调试模板,希望帮助到有需要的同学。
辛苦整理良久,还望手动点赞鼓励~
npm sdk 模板仓库为:https://github.com/fengshi123/npm-sdk
博客 github地址为:https://github.com/fengshi123/blog ,汇总了作者的所有博客,欢迎关注及 star ~
一、初始化 npm 包
1.1、初始化 npm 项目
根据以下命令能初始化一个 npm 包项目,命令交互过程中会让你填入 项目名称、版本、作者等信息,可以直接回车跳过(使用默认设置)
npm init --save
1.2、包权限管理
很多时候,一个项目包往往不只是你一个人在管理的,这时需要给其他一起维护的同学开通发布的权限,相关使用命令如下:
# 查看模块 owner, 其中 demo 为模块名称$ npm owner ls demo# 添加一个发布者, 其中 xxx 为要添加同学的 npm 账号$ npm owner add xxx demo# 删除一个发布者$ npm owner rm xxx demo
1.3、发布版本
1.3.1、发布稳定版本
更新版本号共有以下选项(major | minor | patch | premajor | preminor | prepatch | prerelease) ,注意项目的git status 必须是clear,才能使用这些命令。
# major 主版本号,并且不向下兼容 1.0.0 -> 2.0.0$ npm version major# minor 次版本号,有新功能且向下兼容 1.0.0 -> 1.1.0$ npm version minor# patch 修订号,修复一些问题、优化等 1.0.0 -> 1.0.1$ npm version patch# premajor 预备主版本 1.0.0 -> 2.0.0-0$ npm version premajor# preminor 预备次版本 1.0.0 -> 1.1.0-0$ npm version major# prepatch 预备修订号版本 1.0.0 -> 1.0.1-0$ npm version major# prerelease 预发布版本 1.0.0 -> 1.0.0-0$ npm version major
版本号更新后,我们就可以进行版本的发布
$ npm publish
1.3.2、预发布版本
很多时候一些新改动,并不能直接发布到稳定版本上(稳定版本的意思就是使用 npm install demo 即可下载的最新版本),这时可以发布一个 “预发布版本“,不会影响到稳定版本。
# 发布一个 prelease 版本,tag=beta$ npm version prerelease$ npm publish --tag beta
比如原来的版本号是1.0.1,那么以上发布后的版本是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 版本设置为稳定版本
# 首先可以查看当前所有的最新版本,包括 prerelease 与稳定版本$ npm dist-tag ls# 设置 1.0.1-1 版本为稳定版本$ npm dist-tag add demo@1.0.1-1 latest
这时候,latest 稳定版本已经是1.0.1-1了,用户可以直接通过npm install demo即可安装该版本。
1.3.4、将 beta 版本移除
# 将 beta 版本移除$ npm dist-tag rm demo beta
1.3.5、将 tag 推送到 Git 远程仓库中
# 当我们发布完对应的版本,可以通过以下命令将版本号推送到远程仓库, 其中 xxx 为对应分支$ git push origin xxx --tags
1.4、查看版本信息
可以通过npm info来查看模块的详细信息。
$ npm info
二、使用 typescript
2.1、安装 typescript 作为开发阶段的依赖项
$ npm i typescript -D
2.2、增加配置文件 tsconfig.json
在根目录新建 tsconfig.json,配置项具体的意义可以参考 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
在开发阶段为了能直接执行并且监听 ts 文件的变化,安装 ts-node-dev
$ npm i ts-node-dev -D
在 package.json 中定义一个启动脚本
"scripts": { "start": "ts-node-dev --respawn --transpile-only src/index.ts"}
这样我们就可以实时进行编译,如下所示
三、使用 eslint 校验
3.1、安装 eslint
$ npm i eslint -D
3.2、eslint 初始化
$ ./node_modules/.bin/eslint --init
根据交互命令提示对应生成配置文件如下所示,可以根据团队的代码风格进行对应的配置 .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 中配置对应的校验命令和修复命令,如下所示
"scripts": { "lint": "eslint --ext .ts .", "lint:fix":"eslint --fix --ext .ts ." },
3.5、提交校验
利用 commitlint 和 husky 工具进行代码提交时拦截验证,安装如下
$ npm i @commitlint/cli @commitlint/config-conventional husky lint-staged --D
在 package.json 中进行对应的配置,当 commit 代码时,如果代码中存在 eslint 错误,那么就会进行报错提示
"husky":{ "hooks":{ "pre-commit":"lint-staged", "commit-msg":"commitlint -e $HUSKY_GIT_PARAMS" }, "lint-staged":{ ".ts":[ "eslint --fix" ] }, "commitlint":{ "extends":[ "@commitlint/config-conventional" ] } },
四、编译
我们可以增加对应的 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",},
配置对应的入口地址,其中 module 和 main 的区别是,module 主要在 tree shaking 时会用到。
"main": "lib/index.js", "module": "esm/index.js",
五、本地调试
可以通过 npm link 在正式项目中进行调试,在我们的包目录中安装完发布的线上包后,可以执行以下命令将当前项目 node_modules 底下安装的对应包关联到本地全局 npm 目录的 node_modules 目录下,命令如下
$ npm link npm-sdk@1.0.1-0
执行命令如下所示
然后在对应的 npm sdk 目录下进行关联
$ npm link// 关联成功后如下所示D:\nvm\npm\node_modules\npm-sdk -> F:\all_project\npm-sdk
到这里,通过以上两个步骤的关联,将项目中使用到的 sdk 包,关联到该 sdk 包对应的开发目录,我们就可以在本地对 sdk 包进行调试。
六、总结
本文从 npm 各种常用命令、到 sdk 中使用 typescript、以及使用 eslint 强校验、再到编译/本地调试,从零到一演示如何搭建发布一个 NPM 包,NPM SDK 模板仓库为:https://github.com/fengshi123/npm-sdk,有需要的同学可以直接 clone 进行使用。
博客 github地址为:https://github.com/fengshi123/blog ,汇总了作者的所有博客,欢迎关注及 star ~