Table of Contents
工作了一段时间,觉得有必要将一些有用的工具收集起来,方便复用。想来觉得最好的方法是 github+npm。这比每次手动复制强多了。
创建项目过程略过。
1. 首先,在 npm 上注册账号
或者本地命令 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 吧😭。