zoukankan      html  css  js  c++  java
  • NPM 使用介绍

    转载自:https://blog.csdn.net/qq_27626333/article/details/52304091

    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:

     (1)、允许用户从NPM服务器下载别人编写的第三方包到本地使用。

     (2)、允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。

     (3)、允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

     由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 "npm -v" 来测试是否成功安装。命令如下,出现版本提示表示安装成功:

    如果是 Window 系统使用以下命令即可:

      npm install npm -g

    1、使用 npm 命令安装模块

    npm安装Node.js 模块语法格式如下:

      npm install <Module Name>

    以下实例,我们使用 npm 命令安装常用的 Node.js web框架模块 express:

      npm install express

      

    安装好之后,express 包就放在了工程目录下的 node_modules 目录中,

     

    因此在代码中只需要通过 require('express') 的方式就好,无需指定第三方包路径。

       var express = require('express');

    2、全局安装与本地安装

    npm的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如

      npm install express    # 本地安装

      npm install express -g  # 全局安装

    如果出现以下错误:

      npm err! Error: connect ECONNREFUSED 127.0.0.1:8087

    解决办法为:

      npm config set proxy null

    本地安装

    (1)、 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。

    (2)、可以通过 require() 来引入本地安装的包。

    全局安装

    (1)、将安装包放在 /usr/local 下或者你 node 的安装目录。

    (2)、可以直接在命令行里使用。

    如果你希望具备两者功能,则需要在两个地方安装它或使用 npm link。

    接下来我们使用全局方式安装 express

      npm install express -g

    安装过程输出如下内容,第一行输出了模块的版本号及安装位置。

    你可以使用以下命令来查看所有全局安装的模块:

    npm ls -g

    3、使用 package.json

    package.json 位于模块的目录下,用于定义包的属性。接下来让我们来看下 express 包的 package.json 文件,位于 node_modules/express/package.json 内容:

     
    1. {

    2. "name": "express",

    3. "description": "Fast, unopinionated, minimalist web framework",

    4. "version": "4.14.0",

    5. "author": {

    6. "name": "TJ Holowaychuk",

    7. "email": "tj@vision-media.ca"

    8. },

    9. "contributors": [

    10. {

    11. "name": "Aaron Heckmann",

    12. "email": "aaron.heckmann+github@gmail.com"

    13. },

    14. {

    15. "name": "Ciaran Jessup",

    16. "email": "ciaranj@gmail.com"

    17. },

    18. {

    19. "name": "Douglas Christopher Wilson",

    20. "email": "doug@somethingdoug.com"

    21. },

    22. {

    23. "name": "Guillermo Rauch",

    24. "email": "rauchg@gmail.com"

    25. },

    26. {

    27. "name": "Jonathan Ong",

    28. "email": "me@jongleberry.com"

    29. },

    30. {

    31. "name": "Roman Shtylman",

    32. "email": "shtylman+expressjs@gmail.com"

    33. },

    34. {

    35. "name": "Young Jae Sim",

    36. "email": "hanul@hanul.me"

    37. }

    38. ],

    39. "license": "MIT",

    40. "repository": {

    41. "type": "git",

    42. "url": "https://github.com/expressjs/express"

    43. },

    44. "homepage": "http://expressjs.com/",

    45. "keywords": [

    46. "express",

    47. "framework",

    48. "sinatra",

    49. "web",

    50. "rest",

    51. "restful",

    52. "router",

    53. "app",

    54. "api"

    55. ],

    56. "dependencies": {

    57. "accepts": "~1.3.3",

    58. "array-flatten": "1.1.1",

    59. "content-disposition": "0.5.1",

    60. "content-type": "~1.0.2",

    61. "cookie": "0.3.1",

    62. "cookie-signature": "1.0.6",

    63. "debug": "~2.2.0",

    64. "depd": "~1.1.0",

    65. "encodeurl": "~1.0.1",

    66. "escape-html": "~1.0.3",

    67. "etag": "~1.7.0",

    68. "finalhandler": "0.5.0",

    69. "fresh": "0.3.0",

    70. "merge-descriptors": "1.0.1",

    71. "methods": "~1.1.2",

    72. "on-finished": "~2.3.0",

    73. "parseurl": "~1.3.1",

    74. "path-to-regexp": "0.1.7",

    75. "proxy-addr": "~1.1.2",

    76. "qs": "6.2.0",

    77. "range-parser": "~1.2.0",

    78. "send": "0.14.1",

    79. "serve-static": "~1.11.1",

    80. "type-is": "~1.6.13",

    81. "utils-merge": "1.0.0",

    82. "vary": "~1.1.0"

    83. },

    84. "devDependencies": {

    85. "after": "0.8.1",

    86. "body-parser": "~1.15.1",

    87. "cookie-parser": "~1.4.3",

    88. "ejs": "2.4.2",

    89. "istanbul": "0.4.3",

    90. "marked": "0.3.5",

    91. "method-override": "~2.3.6",

    92. "mocha": "2.5.3",

    93. "morgan": "~1.7.0",

    94. "should": "9.0.2",

    95. "supertest": "1.2.0",

    96. "connect-redis": "~2.4.1",

    97. "cookie-session": "~1.2.0",

    98. "express-session": "~1.13.0",

    99. "jade": "~1.11.0",

    100. "multiparty": "~4.1.2",

    101. "vhost": "~3.0.2"

    102. },

    103. "engines": {

    104. "node": ">= 0.10.0"

    105. },

    106. "files": [

    107. "LICENSE",

    108. "History.md",

    109. "Readme.md",

    110. "index.js",

    111. "lib/"

    112. ],

    113. "scripts": {

    114. "test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/",

    115. "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/",

    116. "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",

    117. "test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/"

    118. },

    119. "gitHead": "9375a9afa9d7baa814b454c7a6818a7471aaef00",

    120. "bugs": {

    121. "url": "https://github.com/expressjs/express/issues"

    122. },

    123. "_id": "express@4.14.0",

    124. "_shasum": "c1ee3f42cdc891fb3dc650a8922d51ec847d0d66",

    125. "_from": "express@latest",

    126. "_npmVersion": "1.4.28",

    127. "_npmUser": {

    128. "name": "dougwilson",

    129. "email": "doug@somethingdoug.com"

    130. },

    131. "maintainers": [

    132. {

    133. "name": "dougwilson",

    134. "email": "doug@somethingdoug.com"

    135. },

    136. {

    137. "name": "hacksparrow",

    138. "email": "captain@hacksparrow.com"

    139. },

    140. {

    141. "name": "jasnell",

    142. "email": "jasnell@gmail.com"

    143. },

    144. {

    145. "name": "mikeal",

    146. "email": "mikeal.rogers@gmail.com"

    147. }

    148. ],

    149. "dist": {

    150. "shasum": "c1ee3f42cdc891fb3dc650a8922d51ec847d0d66",

    151. "tarball": "https://registry.npmjs.org/express/-/express-4.14.0.tgz"

    152. },

    153. "_npmOperationalInternal": {

    154. "host": "packages-12-west.internal.npmjs.com",

    155. "tmp": "tmp/express-4.14.0.tgz_1466095407850_0.17484632693231106"

    156. },

    157. "directories": {},

    158. "_resolved": "https://registry.npmjs.org/express/-/express-4.14.0.tgz"

    159. }

    Package.json 属性说明

    name - 包名。

    version - 包的版本号。

    description - 包的描述。

    homepage - 包的官网 url 。

    author - 包的作者姓名。

    contributors - 包的其他贡献者姓名。

    dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。

    repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。

    main - main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require("express")。

    keywords - 关键字

    4、卸载模块

    我们可以使用以下命令来卸载 Node.js 模块。

    npm uninstall express

    卸载后,你可以到 /node_modules/ 目录下查看包是否还存在,

    或者使用以下命令查看:

    npm ls

    5、更新模块

    我们可以使用以下命令更新模块:

    npm update express

     

    6、搜索模块

    使用以下来搜索模块:

    npm search express

     

    7、创建模块

    创建模块,package.json 文件是必不可少的。我们可以使用 NPM 生成 package.json 文件,生成的文件包含了基本的结果。

     

    以上的信息,你需要根据你自己的情况输入。在最后输入 "yes" 后会生成 package.json 文件。

     

    接下来我们可以使用以下命令在 npm 资源库中注册用户(使用邮箱注册):

    npm adduser

    Username: mcmohd

    Password:

    Email: (this IS public) mcmohd@gmail.com

    接下来我们就用以下命令来发布模块:

    npm publish

    如果你以上的步骤都操作正确,你就可以跟其他模块一样使用 npm 来安装。

    8、版本号

     使用NPM下载和发布代码时都会接触到版本号。NPM使用语义版本号来管理代码,这里简单介绍一下。语义版本号分为X.Y.Z三位,分别代表主版本号、次版本号和补丁版本号。当代码变更时,版本号按以下原则更新。

     (1)、如果只是修复bug,需要更新Z位。

     (2)、如果是新增了功能,但是向下兼容,需要更新Y位。

     (3)、如果有大变动,向下不兼容,需要更新X位。

     版本号有了这个保证后,在申明第三方包依赖时,除了可依赖于一个固定版本号外,还可依赖于某个范围的版本号。例如"argv": "0.0.x"表示依赖于0.0.x系列的最新版argv。

    9、NPM 常用命令

     除了本章介绍的部分外,NPM还提供了很多功能,package.json里也有很多其它有用的字段。除了可以在https://www.npmjs.org/doc/查看官方文档外,这里再介绍一些NPM常用命令。

     (1)、在package.json所在目录下使用npm install . -g可先在本地安装当前命令行程序,可用于发布前的本地测试。

     (2)、使用npm update <package>可以把当前目录下node_modules子目录里边的对应模块更新至最新版本。

     (3)、使用npm update <package> -g可以把全局安装的对应命令行程序更新至最新版。

     (4)、使用npm cache clear可以清空NPM本地缓存,用于对付使用相同版本号发布新版本代码的人。

     (5)、使用npm unpublish <package>@<version>可以撤销发布自己发布过的某个版本代码。

     (6)、npm install <name>安装nodejs的依赖包。例如npm install express 就会默认安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本,如npm install express@3.0.6

     (7)、npm install <name> -g将包安装到全局环境中。但是代码中,直接通过require()的方式是没有办法调用全局安装的包的。全局的安装是供命令行使用的,就好像全局安装了vmarket后,就可以在命令行中直接运行vm命令。

     (8)、npm install <name> --save安装的同时,将信息写入package.json中。项目路径中如果有package.json文件时,直接使用npm install方法就可以根据dependencies配置安装所有的依赖包。这样代码提交到github时,就不用提交node_modules这个文件夹了。

     (9)、npm init 会引导你创建一个package.json文件,包括名称、版本、作者这些信息等

     (10)、npm remove <name>移除

     (11)、npm update <name>更新

     (12)、npm ls 列出当前安装的了所有包

     (13)、npm root 查看当前包的安装路径

     (14)、npm root -g  查看全局的包的安装路径

     (15)、npm help 帮助,如果要单独查看install命令的帮助,可以使用的npm help install

     (16)、npm view moduleNames:查看node模块的package.json文件。注意事项:如果想要查看package.json文件夹下某个标签的内容,可以使用$npm view moduleName labelName

     (17)、npm list:查看当前目录下已安装的node包。注意事项:Node模块搜索是从代码执行的当前目录开始的,搜索结果取决于当前使用的目录中的node_modules下的内容。$ npm list parseable=true可以目录的形式来展现当前安装的所有node包

     (18)、npm view moudleName dependencies:查看包的依赖关系

     (19)、npm view moduleName repository.url:查看包的源文件地址

     (20)、npm view moduleName engines:查看包所依赖的Node的版本

     (21)、npm help folders:查看npm使用的所有文件夹

     (22)、npm rebuild moduleName:用于更改包内容后进行重建

     (23)、npm outdated:检查包是否已经过时,此命令会列出所有已经过时的包,可以及时进行包的更新

    原文地址:https://blog.csdn.net/u011724770/article/details/81866406
  • 相关阅读:
    ZOJ 3332 Strange Country II
    ZOJ 3331 Process the Tasks(双塔DP)
    ZOJ 3326 An Awful Problem(模拟)
    HDU 1796 How many integers can you find(容斥原理)
    HDU 4059 The Boss on Mars(容斥原理)
    HDU 4135 Co-prime(容斥原理)
    HDU 5677 ztr loves substring(回文串加多重背包)
    CodeForces 668B Little Artem and Dance
    CodeForces 667A Pouring Rain
    Java实现 LeetCode 764 最大加号标志(暴力递推)
  • 原文地址:https://www.cnblogs.com/jpfss/p/11113188.html
Copyright © 2011-2022 走看看