zwhu / blog

嘛,写 blog 也要遵守基本法。
MIT License
66 stars 2 forks source link

发布 package 到 npm #18

Open zwhu opened 8 years ago

zwhu commented 8 years ago

记得之前看到一句话,大意是:

凡是能用 JS 写的轮子,最终都会用 JS 重写一遍

昨天把 Linux 的 tree 用 Node.js 重写了一遍,算法用到了深度优先搜索和前序遍历。具体用法可以看这里

拿我写的walk-dir-tree 来做例子,可以看到基本目录结构如下:


.
├── .git
├── .gitignore
├── .npmignore
├── bin
|   └── index
├── example
|   ├── a.js
|   ├── b.js
|   └── c
|       └── d.js
├── index.js
├── node_modules
├── package.json
└── readme.md

.git.gitignore 这两个不需要介绍了。.npmignore 的用法同 .gitignore, 用来忽略上传到 npm 仓库的文件。 bin 目录存放的是可执行脚本,稍候介绍。index.js 作为模块的主文件。 node_modules 存放的是引入的模块,package.jsonnpm 包的描述文件。 readme.md 为模块的介绍。

初始化包可以用过 npm init 命令来生成 package.json 文件,系统会出现交互提示,按照提示填写即可。

{
  "name": "walk-dir-tree",  // 包名称
  "version": "0.0.4", // 包版本号
  "description": "walk-dir-tree is a recursive directory listing command that produces a depth indented listing of files like tree", // 包描述
  "keywords": ["tree", "directory", "walk-dir-tree", "co"],  // 关键字
  "repository": "https://github.com/zwhu/walk-dir-tree", // 包的repo链接
  "bin": "./bin/index", // 命令行工具所要引入的包得位置
  "main": "index.js", // 入口文件
  "author": "zwhu <zwhu2014@foxmail.com>", // 作者
  "license": "ISC", // 包的开源许可证
  "dependencies": {  // 包依赖
    "co": "^4.6.0",
    "colors": "^1.1.2",
    "mz": "^2.1.0"
  }
}

上面就是我的 package.json 的设置。在设置完 package.json 之后,可以把自己编写的包提交到 npm 去了。通过 npm adduser 在npm上创建一个输入自己的账户,千万要记住密码!

然后通过 npm publish <folder> 就可以上传 npm 包。如果在当前 package.json 所在的目录,执行$ npm publish ,等待上传好就可以。

上传完,去 npm 得官网,输入自己刚刚注册的账号,可以对 npm 包进行管理。

上面说的是普通的 npm 包,如果想像我一样上传一个可以让用户在本地执行的 shell 包,需要package.json中的 bin 字段中写上需要执行的文件的相对路径。用户安装的时候需要全局安装了$: npm install 项目名称 -g。 安装完在命令行中输入$: 项目名称 可以执行你上传的库。