在npm上发布一个自己的包

工作了一段时间,觉得有必要将一些有用的工具收集起来,方便复用。想来觉得最好的方法是 github+npm。这比每次手动复制强多了。

创建项目过程略过。

1. 首先,在 npm 上注册账号

https://www.npmjs.com

或者本地命令 npm adduser 注册。

2. 本地 npm 登录账号

npm login
// 也可以是 adduser(没有就注册,有就登录)
// 可以通过 npm who am i 查看本地登录账号
// 退出是 npm logout

根据提示输入相关信息

3. 发布

到需要发布的文件夹发布包

npm publish

  如果成功,你会看到类似下面的字样

+ tiny-utils.js@1.0.0

  如果有下面的错误

npm ERR! code E403
npm ERR! You do not have permission to publish "tiny-utils". Are you logged in as the correct user? : tiny-utils

这就说明 npm 上已经有重名的包了,你需要重命名你的包——打开 package.json 文件,改里面的 name 字段的值,然后发布。

4 安装发布的包

正常的 npm install packageName 就行。


更新

5 本地测试

之前我对包的测试是通过项目下新建一个 test 文件夹,然后像正常项目一样,引入文件,启动测试。但这种方法并不好。而先发布,其他项目下载安装再测试的方法则更糟糕。后来网上看到一篇文章,那里介绍了些本地测试的方法。
Node.js — How to test your new NPM module without publishing it every 5 minutes

我采用的是 npm link 的方法。进入到包目录,执行 npm link 就可以将当前目录链接到全局目录。然后到测试项目目录里,执行 npm link packageName 就可以了。

原文介绍链接是软链接,但我看了目录是硬链接。此外,取消链接的命令是 npm unlink packageName。如果之前有安装过包,还要先删除包才行。npm uninstall packageName.


但 npm link 的方式会出现找不到依赖的情况,因为包并不是真的在测试项目 node_modules 目录下,所以包无法找到需要的依赖。我目前的解决方法是将包直接拷贝到测试项目 node_modules 目录下。


更新

6 babel 转译

我并没有对包进行转译,因此就需要在具体项目里进行转译。配置如下:

{
    test: /\.js$/,
    loader: 'babel-loader',
    include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client'), resolve('node_modules/tiny-utils.js/')]
},

就这么一句话,却折腾了我两三个小时。本来我以为从 node_modules 导入的包也会通过 babel 转译。但实际上,babel 默认并不会对从 node_modules 导入的包进行转译,需要自己配置。要不是今天这个项目要兼容 ie,我也不会发现这一点。全国的 ie 用户,求求你们,放弃 ie 吧😭