Page 52 - Node.js开发指南
P. 52

3.3  模块和包    43


                   本地模式和全局模式的特点如表3-2所示。                                                               1

                                                表3-2  本地模式与全局模式
                          模  式                   可通过 require 使用                  注册PATH
                          本地模式                          是                           否
                                                                                                      2
                          全局模式                          否                           是
                   总而言之,当我们要把某个包作为工程运行时的一部分时,通过本地模式获取,如果要
               在命令行下使用,则使用全局模式安装。
                                                                                                      3
                                  在 Linux/Mac 上使用 npm install -g 安装时有可能需要 root 权限,

                              因为 /usr/local/lib/node_modules/ 通常只有管理员才有权写入。
                                                                                                      4
                   3. 创建全局链接
                   npm 提供了一个有趣的命令 npm link,它的功能是在本地包和全局包之间创建符号链
               接。我们说过使用全局模式安装的包不能直接通过 require 使用,但通过 npm link命令
               可以打破这一限制。举个例子,我们已经通过 npm install -g express 安装了 express,                               5
               这时在工程的目录下运行命令:

                   $ npm link express
                   ./node_modules/express -> /usr/local/lib/node_modules/express
                                                                                                      6
                   我们可以在 node_modules 子目录中发现一个指向安装到全局的包的符号链接。通过这
               种方法,我们就可以把全局包当本地包来使用了。


                              npm link 命令不支持 Windows。                                                 7


                   除了将全局的包链接到本地以外,使用 npm link命令还可以将本地的包链接到全局。
               使用方法是在包目录( package.json 所在目录)中运行 npm link 命令。如果我们要开发                                   8
               一个包,利用这种方法可以非常方便地在不同的工程间进行测试。
                   4. 包的发布
                   npm 可以非常方便地发布一个包,比 pip、gem、pear 要简单得多。在发布之前,首先
                                                                                                      9
               需要让我们的包符合 npm 的规范,npm 有一套以 CommonJS 为基础包规范,但与 CommonJS
               并不完全一致,其主要差别在于必填字段的不同。通过使用 npm init 可以根据交互式问答
               产生一个符合标准的 package.json,例如创建一个名为 byvoidmodule 的目录,然后在这个
               目录中运行npm init:                                                                         10
   47   48   49   50   51   52   53   54   55   56   57