NPM 发布
文章目录

发布到 NPM

  1. 注册个账号
  2. npm login
  3. npm publish

发布到 Github Package

准备 package.json

主要是 repository, publishConfig 这几个字段

1
2
3
4
5
6
7
8
9
10
{
"name": "@szhielelp/bisheng-core",
"version": "1.0.0",
"description": "中英文混排文本格式化工具",
"author": "szhshp",
"repository": "https://github.com/szhielelp/bisheng",
"publishConfig": {
"registry": "https://npm.pkg.github.com/szhielelp"
},
}

生成一个 AccessToken

user - setting - Developer settings - Personal access tokens - Generate new token

勾选 RepoPackage 权限

发布包

1
2
3
4
npm login --registry=https://npm.pkg.github.com
> Username: USERNAME
> Password: TOKEN # 注意这个地方不是输入密码,是输入之前生成的 token
> Email: PUBLIC-EMAIL-ADDRESS

Typescript 发布到 NPM

(需要补充)

两种方式发布库:

  1. 如果是 纯 Node 模块, 可以直接将 package.json 里面 main 设置为入口文件, 比如 index.js
  2. 如果不是 纯 Node, 比如 TSX, TS, 可以打包然后指向打包之后的入口文件

下面的方法是先打包再指向打包之后的入口文件

Add “declaration”: true to your tsconfig.json

tsconfig.json

1
2
3
4
5
6
7
8
9
10
11
12
{
"compilerOptions": {
"target": "es5", // 生成 ES5
"module": "commonjs",
"declaration": true, // 需要加这一句
"lib": ["es2017", "es7", "es6"],
"allowJs": true,
"outDir": "./dist",
// 生成的目标文件夹是 dist, 可选, 也可以通过 build 命令参数来设置
"removeComments": true,
}
}

Add index.d.ts

(需要补充)

添加 Declaration 文件:

1
declare module '[这里写上包名]';

Build to /dist & Add “types”: “index.d.ts” to your package.json

发布之前首先 build, 可以使用 prepublish 自动 trigger

package.json:

1
2
3
4
5
6
7
8
"version": "0.1.9",
"main": "./dist/index.js", // 这里指向 build 之后的目录的入口文件
"types": "./dist/index.d.ts", // 这里指向 declaration 文件
...
"scripts": {
"prepublish": "tsc && yarn run build",
"build": "babel src --extensions \".js,.ts\" --out-dir dist --copy-files --no-copy-ignored", // 这个地方是用 babel build 到 dist, 当然你也可以用其他的工具来 build
},

.gitignore and .npmignore

dist 文件夹现在很重要, 需要发布到 npm

但是我们可能不想把它发布到 github.

那么把 dist 添加到 .gitignore 并且不要添加到 .npmignore

注意如果没有 .npmignore 那么就会默认使用 .gitignore

最简单的方法就是两个都不加 dist, 一起扔到 Github + NPM

发布

1
npm publish

Troubleshooting

You should bug the author to publish it (or use the name yourself!)

检查一下你的项目名称是不是已经被别人用过了。

npm ERR! code E404

看看是不是 npm login 失效了

You cannot publish over the previously published versions: XXX

很显然, 当前正在发布的版本号和以前的某个版本号重复了

把版本号改高一点就行。

403 Forbidden - PUT http://registry.npm.taobao.org/xxx - [no_perms] Private mode enable, only admin can publish this module

检查一下是不是错误使用的, cnpm 或者把 npm 换成了淘宝的源.

切回去重新从 npm 方面发布就可以了.

1
npm config set registry http://registry.npmjs.org/

另外切回去之后要重新登录一下。

1
npm login