发布到npm
先注册一个npm账号
- 可视化注册界面 https://www.npmjs.com/signup 没啥好说的
- 命令行
npm whoami
检测是否登录npm adduser
注册/登录账户- 如果用了淘宝代理还要换回起初的源才能注册
切回默认源
要换回淘宝源的话npm config set registry https://registry.npmjs.org
npm config set registry https://registry.npm.taobao.org
- 如果用了淘宝代理还要换回起初的源才能注册
package 信息
"description": "React components library", //描述
"author": "okkjoo",//作者
"private": false,//是否私人
"main": "dist/build/index.js",//定义了 npm 包的入口文件,browser 环境和 node 环境均可使用
"module": "dist/build/index.js",// 定义 npm 包的 ESM 规范的入口文件,browser 环境和 node 环境均可使用
"types": "dist/build/index.d.ts",//一个只在 TypeScript 中生效的字段,如果您的包有一个 main.js 文件,您还需要在 package.json 文件中指明主声明文件。 将 types 属性设置为指向 bundled 的声明文件
"license": "MIT",
"keywords": [//关键词
"Component",
"UI",
"React",
"okkjoo"
],
"homepage": "https://github.com/okkjoo/zhou-cl",//主页
"repository": {//仓库
"type": "git",
"url": "https://github.com/okkjoo/zhou-cl"
},
"files": [//除了默认上传到npm的以外的文件夹
"dist"
],
这里为了语义更为合适,之前的build文件夹更名为dist了(distribution)。
所以 tsconfig.build.json 中指定的文件夹名称也要重build改为dist,以及命令中对build的操作也要改为对 dist 的操作。
还添加了一个命令"prepublishOnly ": "yarn run build"
相关知识:版本号
格式:主版本号:次版本号:修订号
主版本号:做了不兼容的API修改
次版本号:向下兼容的功能性新增
修订号:向下兼容的问题修正
上传遇到了问题
TypeError: Cannot create property '-registry-npmjs-org' on string '{"-registry-npmjs-org":""}'
在这里找到了一个 issue,以及solution,但没完全解决问题。
随后我又参考了An unexpected error occurred: “Cannot create property..” after running yarn start #4492
Cannot create property ‘-registry-npmjs-org’ on string ‘{“-registry-npmjs-org”
以相似的思路尝试删除了箭头的这行
npm config edit
后进入记事本,搜索registry
找到这句regiistryhttps://registry.npmjs.org=
结果就成功publish
了。——但具体原理我还真没搞明白,只是大概知道是因为
The npmrc was not correctly configured
…先不管了,程序和有人有一个能跑就行🐶。
精简 package.json 依赖
有些依赖仅仅是开发依赖(devDependencies),并不需要打包到生产环境中(dependencies)。比如说:
- 单元测试 :
@test
开头的 - ts 及其类型:
ts
@types
开头的 - 语法转换
- css预处理器
node-sass
- module bundler
react 版本也是一个问题,不能让使用者安装过react后再安装一份,两份版本不同就可能会导致错误的发生。因为react是核心依赖库,核心必须先被安装。
所以在前面的dependencies
字段中将react和react-dom 字段移动到devDependencies
字段中——因为开发时还是需要的。
这就需要 package.json
中另一个字段来帮助
"peerDependencies": {
"react": ">=16.8.0",
"react-dom": ">=16.8.0"
},
这其中声明的依赖不会在npm install
中安装,而是需要使用者提前安装,并且满足条件。
publish/commit 前的自动化检查
代码规范检查
ESLint: cra 就自带了这个。
关于 eslint 后面跟着的配置,可以去官网看。
添加命令
"lint": "eslint --ext js,ts,tsx src --max-warnings 5",
这里第一次运行该lint
命令后,就会看见很多warning
。但是如果没有限制warning
数量的话,是不会报错的。
自动测试
参考文档:https://create-react-app.dev/docs/running-tests/
方法概述就是:设置一个环境变量CI==true
。让所有测试跑一遍,并且返回测试结果。
但是不同操作环境下设置该环境变量方法还不同,非常麻烦。就可以借助一个工具——cross-env,来实现跨平台设置环境变量。
安装:yarn add cross-env --dev
添加命令
"test:nowatch": "cross-env CI=true react-scripts test",
修改命令
"prepublishOnly ": "yarn run test:no watch && yarn lint && yarn run build"
commit 前检查
借助一个小工具[Husky](https://www.npmjs.com/package/husky)
安装:yarn add husky --dev
修改prepublishOnly
命令:添加husky install
。
"prepublishOnly ": "husky install && yarn run test:nowatch && yarn lint && yarn run build"
直接命令行操作
yarn
npx husky add .husky/pre-commit "yarn test:nowatch && yarn lint"
git add .husky/pre-commit