## 手把手教你创建发布第一个模块 [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`的描述)