## 手把手教你创建发布第一个模块
[TOC]
### 准备工作:
从[node官网](http://nodejs.cn/download/)或者[node中文官网](https://nodejs.org/en/download/)下载`node`,并安装
`node`自带`npm`,所以,你不用再单独安装`npm`。
### 演示电脑环境说明:
~~~
电脑系统: OSX 10.11.6 和 Win7 64位系统
node版本: v6.5.0
npm版本: v3.10.3
~~~
### 模块的创建
1.打开命令行
2.切换工作目录到你的开发目录(或者其他任何能你开心的目录)
~~~
$ cd myPath
~~~
3.创建一个文件夹`helloModule`(Tip:文件名你完全可以自定义)
~~~
$ mkdir helloModule
~~~
4.切换工作目录到`helloModule`
~~~
$ cd helloModule
~~~
5.初始化模块,根据提示输入相应的模块信息
~~~
$ npm init
~~~
信息填写完成之后,会生成一个`package.json`文件,下面是我生成的`package.json`的内容:
~~~
{
"name": "hello_module_outsider",
"version": "1.0.0",
"description": "My first node module",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"hello",
"module"
],
"author": "outsider",
"license": "ISC"
}
~~~
>Note:
这里有个问题需要特别注意,由于模块发布的时候,要保证模块名称的唯一性,所以,这里,我模块的名称我加了个个人标签`outsider`,保证这个模块的名称不会和`npm`上面已经发布的模块重名。建议你在创建模块的时候,加上专属于自己的标签,比如,你叫王老明,你的模块名称可以命名为`hello_module_wlm`,用拼音缩写作为标签。
6.创建模块入口文件"index.js"
7.打开"index.js",编写模块内容,这里,我们随便写一行代码
~~~
//向控制台输出“Hello,Module!”
$ console.log('Hello,Module!');
~~~
至此,一个简单可发布到`npm`的模块就创建完成了。
### 模块的使用
前面我们已经创建了一个名为`hello_module_outsider`的模块,本小节将以这个模块为例,来说明如何使用一个模块。
#### 发布模块
1.要发布一个模块,你必须先在[npm官网注册](https://www.npmjs.com/)一个npm账号。
2.打开命令行,将工作目录切换到`hello_module_outsider`模块的根目录下(如果你已经在`hello_module_outsider`的根目录下,则无需切换,Tip:包含`package.json`文件的目录就是模块的根目录,这里,你只需要切换到`helloModule`文件夹下即可)
2.登录npm账号
`$ npm login`
根据提示一次输入正确的npm账号和密码,
3.登录成功后,就可以发布`hello_module_outsider`模块了
`$ npm publish `
如果发布成功,命令行会返回类似下面的语句
~~~
$ + hello_module_outsider@1.0.0
~~~
命令行返回的结果表示——你已经在npm上发布了一个名为` hello_module_outsider`的模块,这个模块的版本号是`1.0.0`。
>Tips:
返回结果的格式是:`module_name@version`(即模块名称@版本号),
1.如果你发布的模块的名称是`hello_module_wlm`,那返回的结果就应该是`hello_module_wlm@1.0.0`,
2.这里的版本号也由你在`package.json`文件中定义的`version`字段决定的。一般,第一个,发布的版本定为`1.0.0`,以后,每次更新一个版本,版本号应做相应的叠加,版本号定义原则,请自行查阅。
OK,你的第一个`node`模块发布成功了!有没有点小激动?现在,你可以在`npm`官网搜索到你发布的模块了,其他开发者也可以搜索到你发布的模块了,赶快上npm官网搜索一下吧!
>Tips:
强烈建议在`package.json`中设置`keyword`关键字,这能提升你发布的模块被其他开发者搜索到的概率。
#### 不发布模块,本地使用
考虑一个场景,你开发了一个`node`模块,但是,由于种种原因(比如涉及公司保密信息或者单纯是因为网络原因),这个模块只能在自己的电脑上或者公司内部使用,不能发布,那么,这个时候,你就需要用到`npm link`命令了(具体用法请查看[npm常用命令](npm常用命令.md)中关于`npm link`的描述)