npm_npm-cli - CSDN
  • npm 是干什么的

    2018-05-30 11:03:40
    网上的 npm 教程主要都在讲怎么安装、配置和使用 npm,却不告诉新人「为什么要使用 npm」。今天我就来讲讲这个话题。 本文目标读者是「不太了解 npm 的新人」,大神您别看了,不然又说我啰嗦了 �� 社区 程序员...

    网上的 npm 教程主要都在讲怎么安装、配置和使用 npm,却不告诉新人「为什么要使用 npm」。今天我就来讲讲这个话题。

    本文目标读者是「不太了解 npm 的新人」,大神您别看了,不然又说我啰嗦了 ��
    社区

    程序员自古以来就有社区文化:

    社区的意思是:拥有共同职业或兴趣的人们,自发组织在一起,通过分享信息和资源进行合作。虚拟社区的参与者经常会在线讨论相关话题,或访问某些网站。
    前端程序员也有社区,世界上最大的前端社区应该就是 GitHub 了。前端通过 GitHub 来

    分享源代码(线上代码仓库)
    讨论问题(Issue 列表)
    收集学习资源和常去的网站(比如我收集的优质中文前端博客https://github.com/FrankFang/best-chinese-front-end-blogs

    加入社区最大的好处之一是,你可以使用别人贡献的代码,你也可以贡献代码给别人用。
    共享代码

    前端是怎么共享代码的呢?

    在 GitHub 还没有兴起的年代,前端是通过网址来共享代码

    比如你想使用 jQuery,那么你点击 jQuery 网站上提供的链接就可以下载 jQuery,放到自己的网站上使用
    这里写图片描述

    GItHub 兴起之后,社区中也有人使用 GitHub 的下载功能:

    麻烦

    当一个网站依赖的代码越来越多,程序员发现这是一件很麻烦的事情:

    去 jQuery 官网下载 jQuery
    去 BootStrap 官网下载 BootStrap
    去 Underscore 官网下载 Underscore
    ……

    有些程序员就受不鸟了,一个拥有三大美德的程序员 Isaac Z. Schlueter (以下简称 Isaaz)给出一个解决方案:用一个工具把这些代码集中到一起来管理吧!

    这个工具就是他用 JavaScript (运行在 Node.js 上)写的 npm,全称是 Node Package Manager

    具体步骤

    NPM 的思路大概是这样的:

    1. 买个服务器作为代码仓库(registry),在里面放所有需要被共享的代码

    2. 发邮件通知 jQuery、Bootstrap、Underscore 作者使用 npm publish 把代码提交到 registry 上,分别取名 jquery、bootstrap 和 underscore(注意大小写)

    3. 社区里的其他人如果想使用这些代码,就把 jquery、bootstrap 和 underscore 写到 package.json 里,然后运行 npm install ,npm 就会帮他们下载代码

    4. 下载完的代码出现在 node_modules 目录里,可以随意使用了。

    这些可以被使用的代码被叫做「包」(package),这就是 NPM 名字的由来:Node Package(包) Manager(管理器)。

    发展

    Isaaz 通知 jQuery 作者 John Resig,他会答应吗?这事儿不一定啊,对不对。

    只有社区里的人都觉得 「npm 是个宝」的时候,John Resig 才会考虑使用 npm。

    那么 npm 是怎么火的呢?

    npm 的发展是跟 Node.js 的发展相辅相成的。

    Node.js 是由一个在德国工作的美国程序员 Ryan Dahl 写的。他写了 Node.js,但是 Node.js 缺少一个包管理器,于是他和 npm 的作者一拍即合、抱团取暖,最终 Node.js 内置了 npm。

    后来的事情大家都知道,Node.js 火了。

    随着 Node.js 的火爆,大家开始用 npm 来共享 JS 代码了,于是 jQuery 作者也将 jQuery 发布到 npm 了。

    所以现在,你可以使用 npm install jquery 来下载 jQuery 代码。

    现在用 npm 来分享代码已经成了前端的标配。

    后续

    Node.js 目前由 Ryan Dahl 当时所在的公司 joyent 继续开发。Ryan Dahl 现在已经去研究 AI 和机器学习了,并且他把 Node.js 的维护权交给了 Isaaz。(我是不是也应该去研究 AI 和机器学习啊教练)

    而 Isaaz 维护了一段时间后,辞职了,成立了一个公司专门维护 npm 的 registry,公司名叫做 npm 股份有限公司……谁说开源不能赚钱的~

    社区的力量

    回顾前端的发展是你会发现,都是社区里的某个人,发布了一份代码,最终影响前端几年的走向。比如 jQuery,比如 Node.js,比如 npm。(其实其他语言也是这样的)

    所以,社区的力量是巨大的。

    展开全文
  • 最详细、最全面、最细致的 NPM 教学

    什么是 NPM

    npm 之于 Node.js ,就像 pip 之于 Python, gem 之于 Ruby, pear 之于 PHP 。

    npm 是 Node.js 官方提供的包管理工具,他已经成了 Node.js 包的标准发布平台,用于 Node.js 包的发布、传播、依赖控制。npm 提供了命令行工具,使你可以方便地下载、安装、升级、删除包,也可以让你作为开发者发布并维护包。

    为什么要使用 NPM

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

    • 允许用户从 npm 服务器下载别人编写的第三方包到本地使用。
    • 允许用户从 npm 服务器下载并安装别人编写的命令行程序到本地使用。
    • 允许用户将自己编写的包或命令行程序上传到 npm 服务器供别人使用。

    npm 的背后,是基于 couchdb 的一个数据库,详细记录了每个包的信息,包括作者、版本、依赖、授权信息等。它的一个很重要的作用就是:将开发者从繁琐的包管理工作(版本、依赖等)中解放出来,更加专注于功能的开发。

    如何使用 NPM

    安装

    npm 不需要单独安装。在安装 Node 的时候,会连带一起安装 npm 。但是,Node 附带的 npm 可能不是最新版本,最后用下面的命令,更新到最新版本。

    $ sudo npm install npm@latest -g
    

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

    npm install npm -g
    

    也就是使用 npm 安装自己。之所以可以这样,是因为 npm 本身与 Node 的其他模块没有区别。

    然后,运行下面的命令,查看各种信息。

    # 查看 npm 命令列表
    $ npm help
    
    # 查看各个命令的简单用法
    $ npm -l
    
    # 查看 npm 的版本
    $ npm -v
    
    # 查看 npm 的配置
    $ npm config list -l
    

    使用

    npm init

    npm init 用来初始化生成一个新的 package.json 文件。它会向用户提问一系列问题,如果你觉得不用修改默认配置,一路回车就可以了。
    如果使用了 -f(代表force)、-y(代表yes),则跳过提问阶段,直接生成一个新的 package.json 文件。

    $ npm init -y
    

    npm set

    npm set 用来设置环境变量

    $ npm set init-author-name 'Your name'
    $ npm set init-author-email 'Your email'
    $ npm set init-author-url 'http://yourdomain.com'
    $ npm set init-license 'MIT'
    

    上面命令等于为 npm init 设置了默认值,以后执行 npm init 的时候,package.json 的作者姓名、邮件、主页、许可证字段就会自动写入预设的值。这些信息会存放在用户主目录的 ~/.npmrc文件,使得用户不用每个项目都输入。如果某个项目有不同的设置,可以针对该项目运行 npm config

    npm info

    npm info 命令可以查看每个模块的具体信息。比如,查看 underscore 模块的信息。

    $ npm info underscore
    

    上面命令返回一个 JavaScript 对象,包含了 underscore 模块的详细信息。这个对象的每个成员,都可以直接从 info 命令查询。

    $ npm info underscore description
    
    $ npm info underscore homepage
    
    $ npm info underscore version
    

    npm search

    npm search 命令用于搜索 npm 仓库,它后面可以跟字符串,也可以跟正则表达式。

    $ npm search <搜索词>
    

    npm list

    npm list 命令以树形结构列出当前项目安装的所有模块,以及它们依赖的模块。

    $ npm list
    
    # 加上 global 参数,会列出全局安装的模块
    $ npm list -global
    
    # npm list 命令也可以列出单个模块
    $ npm list underscore
    

    npm install

    使用 npm 安装包的命令格式为:
    npm [install/i] [package_name]

    本地模式和全局模式

    npm 在默认情况下会从 http://npmjs.org 搜索或下载包,将包安装到当前目录的 node_modules 子目录下。

    如果你熟悉 Ruby 的 gem 或者 Python 的 pip,你会发现 npm 与它们的行为不同,gem 或 pip 总是以全局模式安装,使包可以供所有的程序使用,而 npm 默认会把包安装到当前目录下。这反映了 npm 不同的设计哲学。如果把包安装到全局,可以提供程序的重复利用程度,避免同样的内容的多分副本,但坏处是难以处理不同的版本依赖。如果把包安装到当前目录,或者说本地,则不会有不同程序依赖不同版本的包的冲突问题,同时还减轻了包作者的 API 兼容性压力,但缺陷则是同一个包可能会被安装许多次。

    我们在使用 supervisor 的时候使用了 npm install -g supervisor 命令,就是以全局模式安装 supervisor 。

    这里注意一点的就是,supervisor 必须安装到全局,如果你不安装到全局,错误命令会提示你安装到全局。如果不想安装到默认的全局,也可以自己修改全局路径到当前路径 npm config set prefix "路径" 安装完以后就可以用 supervisor 来启动服务了。

    supervisor 可以帮助你实现这个功能,它会监视你对代码的驱动,并自动重启 Node.js 。

    一般来说,全局安装只适用于工具模块,比如 eslintgulp 。关于使用全局模式,多数时候并不是因为许多程序都有可能用到了它,为了减少多重副本而使用全局模式,而是因为本地模式不会注册 PATH 环境变量

    “本地安装”指的是将一个模块下载到当前项目的 node_modules 子目录,然后只有在项目目录之中,才能调用这个模块。

    本地模式和全局模式的特点如下:

    模式 可通过 require 使用 注册 PATH
    本地模式
    全局模式
    # 本地安装
    $ npm install <package name>
    
    # 全局安装
    $ sudo npm install -global <package name>
    $ sudo npm install -g <package name>
    

    npm install 也支持直接输入 Github 代码库地址。

    $ npm install git://github.com/package/path.git
    $ npm install git://github.com/package/path.git#0.1.0
    

    安装之前,npm install 会先检查,node_modules 目录之中是否已经存在指定模块。如果存在,就不再重新安装了,即使远程仓库已经有了一个新版本,也是如此。

    如果你希望,一个模块不管是否安装过, npm 都要强制重新安装,可以使用 -f 或 --force 参数。

    $ npm install <packageName> --force
    

    安装不同版本

    install 命令总是安装模块的最新版本,如果要安装模块的特定版本,可以在模块名后面加上 @ 和版本号。

    $ npm install sax@latest
    $ npm install sax@0.1.1
    $ npm install sax@">=0.1.0 <0.2.0"
    

    install 命令可以使用不同参数,指定所安装的模块属于哪一种性质的依赖关系,即出现在 packages.json 文件的哪一项中。

    –save:模块名将被添加到 dependencies,可以简化为参数-S。
    –save-dev:模块名将被添加到 devDependencies,可以简化为参数-D。

    $ npm install sax --save
    $ npm install node-tap --save-dev
    # 或者
    $ npm install sax -S
    $ npm install node-tap -D
    

    dependencies 依赖

    这个可以说是我们 npm 核心一项内容,依赖管理,这个对象里面的内容就是我们这个项目所依赖的 js 模块包。下面这段代码表示我们依赖了 markdown-it 这个包,版本是 ^8.1.0 ,代表最小依赖版本是 8.1.0 ,如果这个包有更新,那么当我们使用 npm install 命令的时候,npm 会帮我们下载最新的包。当别人引用我们这个包的时候,包内的依赖包也会被下载下来。

    "dependencies": {
        "markdown-it": "^8.1.0"
    }
    

    devDependencies 开发依赖

    在我们开发的时候会用到的一些包,只是在开发环境中需要用到,但是在别人引用我们包的时候,不会用到这些内容,放在 devDependencies 的包,在别人引用的时候不会被 npm 下载。

    "devDependencies": {
        "autoprefixer": "^6.4.0",0",
        "babel-preset-es2015": "^6.0.0",
        "babel-preset-stage-2": "^6.0.0",
        "babel-register": "^6.0.0",
        "webpack": "^1.13.2",
        "webpack-dev-middleware": "^1.8.3",
        "webpack-hot-middleware": "^2.12.2",
        "webpack-merge": "^0.14.1",
        "highlightjs": "^9.8.0"
    }
    

    当你有了一个完整的 package.json 文件的时候,就可以让人一眼看出来,这个模块的基本信息,和这个模块所需要依赖的包。我们可以通过 npm install 就可以很方便的下载好这个模块所需要的包。

    npm install 默认会安装 dependencies 字段和 devDependencies 字段中的所有模块,如果使用 --production 参数,可以只安装 dependencies 字段的模块。

    $ npm install --production
    # 或者
    $ NODE_ENV=production npm install
    

    一旦安装了某个模块,就可以在代码中用 require 命令加载这个模块。

    var backbone = require('backbone')
    console.log(backbone.VERSION)
    

    npm run

    npm 不仅可以用于模块管理,还可以用于执行脚本。package.json 文件有一个 scripts 字段,可以用于指定脚本命令,供 npm 直接调用。
    package.json

    {
      "name": "myproject",
      "devDependencies": {
        "jshint": "latest",
        "browserify": "latest",
        "mocha": "latest"
      },
      "scripts": {
        "lint": "jshint **.js",
        "test": "mocha test/"
      }
    }
    

    scripts 脚本

    顾名思义,就是一些脚本代码,可以通过 npm run script-key 来调用,例如在这个 package.json 的文件夹下使用 npm run dev 就相当于运行了 node build/dev-server.js 这一段代码。使用 scripts 的目的就是为了把一些要执行的代码合并到一起,使用 npm run 来快速的运行,方便省事。
    npm runnpm run-script 的缩写,一般都使用前者,但是后者可以更好的反应这个命令的本质。

    // 脚本
    "scripts": {
        "dev": "node build/dev-server.js",
        "build": "node build/build.js",
        "docs": "node build/docs.js",
        "build-docs": "npm run docs & git checkout gh-pages & xcopy /sy dist\\* . & git add . & git commit -m 'auto-pages' & git push & git checkout master",
        "build-publish": "rmdir /S /Q lib & npm run build &git add . & git commit -m auto-build & npm version patch & npm publish & git push",
        "lint": "eslint --ext .js,.vue src"
    }
    

    npm run 如果不加任何参数,直接运行,会列出 package.json 里面所有可以执行的脚本命令。
    npm 内置了两个命令简写, npm test 等同于执行 npm run testnpm start 等同于执行 npm run start

    "build": "npm run build-js && npm run build-css"
    

    上面的写法是先运行 npm run build-js ,然后再运行 npm run build-css ,两个命令中间用 && 连接。如果希望两个命令同时平行执行,它们中间可以用 & 连接。

    写在 scripts 属性中的命令,也可以在 node_modules/.bin 目录中直接写成 bash 脚本。下面是一个 bash 脚本。

    #!/bin/bash
    
    cd site/main
    browserify browser/main.js | uglifyjs -mc > static/bundle.js
    

    假定上面的脚本文件名为 build.sh ,并且权限为可执行,就可以在 scripts 属性中引用该文件。

    "build-js": "bin/build.sh"
    

    pre- 和 post- 脚本

    npm run 为每条命令提供了 pre-post- 两个钩子(hook)。以 npm run lint 为例,执行这条命令之前,npm 会先查看有没有定义 prelint 和 postlint 两个钩子,如果有的话,就会先执行 npm run prelint,然后执行 npm run lint,最后执行 npm run postlint

    {
      "name": "myproject",
      "devDependencies": {
        "eslint": "latest"
        "karma": "latest"
      },
      "scripts": {
        "lint": "eslint --cache --ext .js --ext .jsx src",
        "test": "karma start --log-leve=error karma.config.js --single-run=true",
        "pretest": "npm run lint",
        "posttest": "echo 'Finished running tests'"
      }
    }
    

    上面代码是一个 package.json 文件的例子。如果执行 npm test,会按下面的顺序执行相应的命令。

    1. pretest
    2. test
    3. posttest

    如果执行过程出错,就不会执行排在后面的脚本,即如果 prelint 脚本执行出错,就不会接着执行 lint 和 postlint 脚本。

    npm bin

    npm bin 命令显示相对于当前目录的,Node 模块的可执行脚本所在的目录(即 .bin 目录)。

    # 项目根目录下执行
    $ npm bin
    ./node_modules/.bin
    

    创建全局链接

    npm 提供了一个有趣的命令 npm link,它的功能是在本地包和全局包之间创建符号链接。我们说过使用全局模式安装的包不能直接通过 require 使用。但通过 npm link 命令可以打破这一限制。举个例子,我们已经通过 npm install -g express 安装了 express,这时在工程的目录下运行命令:

    npm link express ./node_modules/express -> /user/local/lib/node_modules/express
    

    我们可以在 node_modules 子目录中发现一个指向安装到全局的包的符号链接。通过这种方法,我们就可以把全局包当做本地包来使用了。

    除了将全局的包链接到本地以外,使用 npm link 命令还可以将本地的包链接到全局。使用方法是在包目录(package.json 所在目录)中运行 npm link 命令。如果我们要开发一个包,利用这种方法可以非常方便地在不同的工程间进行测试。

    创建包

    包是在模块基础上更深一步的抽象,Node.js 的包类似于 C/C++ 的函数库或者 Java、.Net 的类库。它将某个独立的功能封装起来,用于发布、更新、依赖管理和版本控制。Node.js 根据 CommonJS 规范实现了包机制,开发了 npm 来解决包的发布和获取需求。
    Node.js 的包是一个目录,其中包含了一个 JSON 格式的包说明文件 package.json。严格符合 CommonJS 规范的包应该具备以下特征:
    。package.json 必须在包的顶层目录下;
    。二进制文件应该在 bin 目录下;
    。JavaScript 代码应该在 lib 目录下;
    。文档应该在 doc 目录下;
    。单元测试应该在 test 目录下。

    Node.js 对包的要求并没有这么严格,只要顶层目录下有 package.json,并符合一些规范即可。当然为了提高兼容性,我们还是建议你在制作包的时候,严格遵守 CommonJS 规范。

    我们也可以把文件夹封装为一个模块,即所谓的包。包通常是一些模块的集合,在模块的基础上提供了更高层的抽象,相当于提供了一些固定接口的函数库。通过定制 package.json,我们可以创建更复杂,更完善,更符合规范的包用于发布。

    Node.js 在调用某个包时,会首先检查包中 packgage.json 文件的 main 字段,将其作为包的接口模块,如果 package.json 或 main 字段不存在,会尝试寻找 index.js 或 index.node 作为包的接口。

    package.json 是 CommonJS 规定的用来描述包的文件,完全符合规范的 package.json 文件应该含有以下字段:

    name: 包的名字,必须是唯一的,由小写英文字母、数字和下划线组成,不能包含空格。
    description: 包的简要说明。
    version: 符合语义化版本识别规范的版本字符串。
    keywords: 关键字数组,通常用于搜索。
    maintainers: 维护者数组,每个元素要包含 name 、email(可选)、web(可选)字段。
    contributors: 贡献者数组,格式与 maintainers 相同。包的作者应该是贡献者数组的第一个元素。
    bugs: 提交 bug 的地址,可以是网址或者电子邮件地址。
    licenses: 许可证数组,每个元素要包含 type(许可证的名称)和 url(链接到许可证文本的地址)字段。
    repositories: 仓库托管地址数组,每个元素要包含 type(仓库的类型,如 git)、URL(仓库的地址)和 path(相对于仓库的路径,可选)字段。
    dependencies: 包的依赖,一个关联数组,由包名称和版本号组成。

    包的发布

    通过使用 npm init 可以根据交互式回答产生一个符合标准的 package.json。创建一个 index.js 作为包的接口,一个简单的包就制作完成了。
    在发布前,我们还需要获得一个账号用于今后维护自己的包,使用 npm adduser 根据提示完成账号的创建。

    完成后可以使用 npm whoami 检测是否已经取得了账号。

    接下来,在 package.json 所在目录下运行 npm publish,稍等片刻就可以完成发布了,打开浏览器,访问 http://search.npmjs.org/ 就可以找到自己刚刚发布的包了。现在我们可以在世界的任意一台计算机上使用 npm install neveryumodule 命令来安装它。

    如果你的包将来有更新,只需要在 package.json 文件中修改 version 字段,然后重新使用 npm publish 命令就行了。
    如果你对已发布的包不满意,可以使用 npm unpublish 命令来取消发布。

    需要说明的是:json 文件不能有注释

    参考链接

    http://javascript.ruanyifeng.com/nodejs/npm.html

    我的常用命令

    npm version  查看npm和node的版本
    npm list --depth=0 [-g]  查看[全局]安装的包
    npm root [-g]  查看[全局的]包的安装路径
    
    展开全文
  • npm安装

    2018-11-07 18:32:35
    npm:nodejs下的包管理器 webpack:主要的功能是通过commentJS语法把所有浏览器端需要发布的静态资源做相应的准备,如资源的合并和打包 vue-cli:用户生成VUE工程模板。(帮你快速开始一个vue的项目,也就是给你...

    npm:nodejs下的包管理器

    webpack:主要的功能是通过commentJS语法把所有浏览器端需要发布的静态资源做相应的准备,如资源的合并和打包

    vue-cli:用户生成VUE工程模板。(帮你快速开始一个vue的项目,也就是给你一套vue的结构,包含基础的依赖库,只需要 npm install就可以安装)

    1、下载nodejs,网址:https://nodejs.org/en/

    2、安装nodejs,安装成功

    3、打开cmd,检查是否正常

    4、输入echo %PATH%查看环境变量中是否含有刚刚安装的nodejs

    5、输入node -v查看安装的node版本

    6、输入npm -v 可查看npm的版本

    7、打开C:\Users\Administrator\AppData\Roaming文件夹,找到npm文件夹,移动到nodejs的安装目录下

    8、在nodejs安装目录下创建node_cache、node_global两个文件夹

    9、cmd中运行下面两条命令

    npm config set prefix "nodejs安装目录\node_global"

    npm config set cache "nodejs安装目录\node_cache"

    10、输入npm list -global可以查看到文件路径已经改变了(可以看到运行上面的两个命令前后的变化)

    11、输入命令npm config set registry=http://registry.npm.taobao.org 配置镜像站

    12、输入命令npm config list 显示所有配置信息,可以查看到我们刚刚配置的三个参数cache、prefix、registry

    13、用编辑器打开C:\Users\Administrator\.npmrc这个文件可看到上面的配置信息

    14、输入命令npm config get registry检测镜像

    15、输入命令npm info vue 获得vue的信息

    16、输入命令npm install(安装模块名) npm -g安装或更新nom install命令;-g是安装到nodejs目录下的node_global目录下

    17、输入命令npm install npm -g查看global下的模块

    18、输入npm -v可查看到npm升级后的版本

    19、默认的node_module目录已经改到node_global目录下了,直接运行npm install命令将会报错

    20、增加环境变量NODE_PATH ,内容是node_modules目录的路径

    21、输入命令npm install vue -g把Vue.js安装到全局目录下node_global

    22、安装成功后可以在node_global目录下可以查看到Vue文件夹

    23、测试npm安装vue-router;输入命令:npm install vue-router -g

    24、运行npm install vue-cli -g安装vue脚手架

    25、把vue添加到环境变量中去(node_global下的vue.cmd)

    26、输入vue -V查看vue版本;进入nodejs安装的根目录(也就是盘符,如D:)

    vue-cli工具是内置了模板包括webpack和webpack-simple,前者是比较复杂专业的项目,他的配置并不全放在根目录下的webpack.config.js中

     

    创建项目完成

    27、初始化,安装依赖

    进入目录 cd vue01(目录名称);输入npm install安装依赖

    28、npm run dev

    29、浏览器打开localhost:8081可以看到下main的页面,端口号根据与上图中的端口号一致

    30、npm run build 生成静态文件,打开dist文件夹下新生成的index.html文件

     

     

     

     

     

     

     

     

    展开全文
  • npm 常用命令详解

    2017-05-09 16:50:13
    npm是什么npm install 安装模块npm uninstall 卸载模块 npm update 更新模块npm outdated 检查模块是否已经过时npm ls 查看安装的模块npm init 在项目中引导创建一个package.json文件npm help 查看某条命令的详细...

    本文以Windows平台上做测试,以gulp为示例做教程,出自作者白树,转载请声明!

    目录

    • npm是什么
    • npm install 安装模块
    • npm uninstall 卸载模块
    • npm update 更新模块
    • npm outdated 检查模块是否已经过时
    • npm ls 查看安装的模块
    • npm init 在项目中引导创建一个package.json文件
    • npm help 查看某条命令的详细帮助
    • npm root 查看包的安装路径
    • npm config 管理npm的配置路径
    • npm cache 管理模块的缓存
    • npm start 启动模块
    • npm stop 停止模块
    • npm restart 重新启动模块
    • npm test 测试模块
    • npm version 查看模块版本
    • npm view 查看模块的注册信息
    • npm adduser  用户登录
    • npm publish 发布模块
    • npm access 在发布的包上设置访问级别
    • npm package.json的语法

     

    npm是什么

    NPM的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载、安装、上传以及管理已经安装的包。

    npm install 安装模块

    基础语法

    复制代码
    复制代码
    npm install (with no args, in package dir)
    npm install [<@scope>/]<name>
    npm install [<@scope>/]<name>@<tag>
    npm install [<@scope>/]<name>@<version>
    npm install [<@scope>/]<name>@<version range>
    npm install <tarball file>
    npm install <tarball url>
    npm install <folder>
    
    alias: npm i
    common options: [-S|--save|-D|--save-dev|-O|--save-optional] [-E|--save-exact] [--dry-run]
    复制代码
    复制代码

    安装包,默认会安装最新的版本

    npm install gulp

    安装指定版本

    npm install gulp@3.9.1

    安装包并将信息保持到项目的package.json文件中

    项目对模块的依赖可以使用下面的 3 种方法来表示(假设当前版本号是 1.1.0 ):

    • 兼容模块新发布的补丁版本:~1.1.0、1.1.x、1.1
    • 兼容模块新发布的小版本、补丁版本:^1.1.0、1.x、1
    • 兼容模块新发布的大版本、小版本、补丁版本:*、x

    -S, --save 安装包信息将加入到dependencies(生产阶段的依赖)

    npm install gulp --save 或 npm install gulp -S

    package.json 文件的 dependencies 字段:

    "dependencies": {
        "gulp": "^3.9.1"
    }

    -D, --save-dev 安装包信息将加入到devDependencies(开发阶段的依赖),所以开发阶段一般使用它

    npm install gulp --save-dev 或 npm install gulp -D

    package.json 文件的 devDependencies字段:

    "devDependencies": {
        "gulp": "^3.9.1"
    }

    -O, --save-optional 安装包信息将加入到optionalDependencies(可选阶段的依赖)

    npm install gulp --save-optional 或 npm install gulp -O

    package.json 文件的optionalDependencies字段:

    "optionalDependencies": {
        "gulp": "^3.9.1"
    }

    -E, --save-exact 精确安装指定模块版本

    npm install gulp --save-exact 或 npm install gulp -E

    输入命令npm install gulp -ES,留意package.json 文件的 dependencies 字段,以看出版本号中的^消失了

    "dependencies": {
        "gulp": "3.9.1"
    }

    模块的依赖都被写入了package.json文件后,他人打开项目的根目录(项目开源、内部团队合作),使用npm install命令可以根据dependencies配置安装所有的依赖包

    npm install

    本地安装(local)

    npm install gulp

    全局安装(global),使用 -g 或 --global

    npm install gulp -g

    npm uninstall 卸载模块 

    基础语法

    npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|-D|--save-dev|-O|--save-optional]
    
    aliases: remove, rm, r, un, unlink

    如卸载开发版本的模块

    npm uninstall gulp --save-dev

    npm update 更新模块

    基础语法

    npm update [-g] [<pkg>...]

    npm outdated 检查模块是否已经过时

    基础语法

    npm outdated [[<@scope>/]<pkg> ...]

    此命令会列出所有已经过时的包,可以及时进行包的更新

    npm ls 查看安装的模块

    基础语法

    npm ls [[<@scope>/]<pkg> ...]
    
    aliases: list, la, ll

    查看全局安装的模块及依赖 

    npm ls -g 

    npm init 在项目中引导创建一个package.json文件

    安装包的信息可保持到项目的package.json文件中,以便后续的其它的项目开发或者他人合作使用,也说package.json在项目中是必不可少的。

    npm init [-f|--force|-y|--yes]

    npm help 查看某条命令的详细帮助 

    基础语法

    npm help <term> [<terms..>]

    例如输入npm help install,系统在默认的浏览器或者默认的编辑器中打开本地nodejs安装包的文件/nodejs/node_modules/npm/html/doc/cli/npm-install.html

    npm help install

    npm root 查看包的安装路径

    输出 node_modules的路径

    npm root [-g]

    npm config 管理npm的配置路径

    基础语法

    复制代码
    复制代码
    npm config set <key> <value> [-g|--global]
    npm config get <key>
    npm config delete <key>
    npm config list
    npm config edit
    npm get <key>
    npm set <key> <value> [-g|--global]
    复制代码
    复制代码

    对于config这块用得最多应该是设置代理,解决npm安装一些模块失败的问题

    例如我在公司内网,因为公司的防火墙原因,无法完成任何模块的安装,这个时候设置代理可以解决

    npm config set proxy=http://dev-proxy.oa.com:8080

    又如国内的网络环境问题,某官方的IP可能被和谐了,幸好国内有好心人,搭建了镜像,此时我们简单设置镜像

    npm config set registry="http://r.cnpmjs.org"

    也可以临时配置,如安装淘宝镜像

    npm install -g cnpm --registry=https://registry.npm.taobao.org

    npm cache 管理模块的缓存

    基础语法

    复制代码
    复制代码
    npm cache add <tarball file>
    npm cache add <folder>
    npm cache add <tarball url>
    npm cache add <name>@<version>
    
    npm cache ls [<path>]
    
    npm cache clean [<path>]
    复制代码
    复制代码

    最常用命令无非清除npm本地缓存

    npm cache clean

    npm start 启动模块

    基础语法

    npm start [-- <args>]

    该命令写在package.json文件scripts的start字段中,可以自定义命令来配置一个服务器环境和安装一系列的必要程序,如

    "scripts": {
        "start": "gulp -ws"
    }

    此时在cmd中输入npm start命令相当于执行gulpfile.js文件自定义的watch和server命令。

    如果package.json文件没有设置start,则将直接启动node server.js

    npm stop 停止模块

    基础语法

    npm stop [-- <args>]

    npm restart 重新启动模块

    基础语法

    npm restart [-- <args>]

    npm test 测试模块

    基础语法

    npm test [-- <args>]
    npm tst [-- <args>]

    该命令写在package.json文件scripts的test字段中,可以自定义该命令来执行一些操作,如

    "scripts": {
        "test": "gulp release"
    },

    此时在cmd中输入npm test命令相当于执行gulpfile.js文件自定义的release命令。

    npm version 查看模块版本

    基础语法

    复制代码
    复制代码
    npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git]
    
    'npm [-v | --version]' to print npm version
    'npm view <pkg> version' to view a package's published version
    'npm ls' to inspect current package/dependency versions
    复制代码
    复制代码

    查看模块的版本

    npm version

    npm view 查看模块的注册信息

    基础语法

    npm view [<@scope>/]<name>[@<version>] [<field>[.<subfield>]...]
    
    aliases: info, show, v

    查看模块的依赖关系

    npm view gulp dependencies

    查看模块的源文件地址

    npm view gulp repository.url

    查看模块的贡献者,包含邮箱地址

    npm view npm contributors

    npm adduser 用户登录

    基础语法

    npm adduser [--registry=url] [--scope=@orgname] [--always-auth]

    发布模板到npm社区前需要先登录,然后再进入发布的操作

    npm publish 发布模块

    基础语法

    npm publish [<tarball>|<folder>] [--tag <tag>] [--access <public|restricted>]
    
    Publishes '.' if no argument supplied
    Sets tag 'latest' if no --tag specified

    npm access 在发布的包上设置访问级别

    基础语法

    复制代码
    复制代码
    npm access public [<package>]
    npm access restricted [<package>]
    
    npm access grant <read-only|read-write> <scope:team> [<package>]
    npm access revoke <scope:team> [<package>]
    
    npm access ls-packages [<user>|<scope>|<scope:team>]
    npm access ls-collaborators [<package> [<user>]]
    npm access edit [<package>]
    复制代码
    复制代码

    npm package.json的语法

    英文原版:https://docs.npmjs.com/files/package.json

    这块内容好多,国内有好心人整理:《npm的package.json中文文档》,从这份文档拷贝出一些比较常见的,如下:

    默认值

    npm会根据包内容设置一些默认值。

    • "scripts": {"start": "node server.js"}

      如果包的根目录有server.js文件,npm会默认将start命令设置为node server.js

    • "scripts":{"preinstall": "node-waf clean || true; node-waf configure build"}

      如果包的根目录有wscript文件,npm会默认将preinstall命令用node-waf进行编译。

    • "scripts":{"preinstall": "node-gyp rebuild"}

      如果包的根目录有binding.gyp文件,npm会默认将preinstall命令用node-gyp进行编译。

    • "contributors": [...]

      如果包的根目录有AUTHORS文件,npm会默认逐行按Name <email> (url)格式处理,邮箱和url是可选的。#号和空格开头的行会被忽略。

    name

    在package.json中最重要的就是name和version字段。他们都是必须的,如果没有就无法install。name和version一起组成的标识在假设中是唯一的。改变包应该同时改变version。

    name是这个东西的名字。注意:

    • 不要把node或者js放在名字中。因为你写了package.json它就被假定成为了js,不过你可以用"engine"字段指定一个引擎(见后文)。
    • 这个名字会作为在URL的一部分、命令行的参数或者文件夹的名字。任何non-url-safe的字符都是不能用的。
    • 这个名字可能会作为参数被传入require(),所以它应该比较短,但也要意义清晰。
    • 在你爱上你的名字之前,你可能要去npm registry查看一下这个名字是否已经被使用了。http://registry.npmjs.org/

    version

    version必须能被node-semver解析,它被包在npm的依赖中。(要自己用可以执行npm install semver

    可用的“数字”或者“范围”见semver(7).

    description

    放简介,字符串,方便在npm search中搜索

    keywords

    关键字,数组、字符串,方便在npm search中搜索

    bugs

    你项目的提交问题的url和(或)邮件地址

    {
     "url" : "http://github.com/owner/project/issues", 
    "email" : "project@hostname.com"
    }

    license

    你应该要指定一个许可证,让人知道使用的权利和限制的。

    最简单的方法是,假如你用一个像BSD或者MIT这样通用的许可证,就只需要指定一个许可证的名字,像这样:

    { "license" : "BSD" }

    如果你又更复杂的许可条件,或者想要提供给更多地细节,可以这样:

    "licenses" : [
      { "type" : "MyLicense"
      , "url" : "http://github.com/owner/project/path/to/license"
      }
    ]

    repository

    指定你的代码存放的地方。这个对希望贡献的人有帮助。如果git仓库在github上,那么npm docs命令能找到你。

    这样做:

    复制代码
    复制代码
    "repository" :
      { "type" : "git"
      , "url" : "http://github.com/isaacs/npm.git"
      }
    
    "repository" :
      { "type" : "svn"
      , "url" : "http://v8.googlecode.com/svn/trunk/"
      }
    复制代码
    复制代码

    URL应该是公开的(即便是只读的)能直接被未经过修改的版本控制程序处理的url。不应该是一个html的项目页面。因为它是给计算机看的。

    scripts

    “scripts”是一个由脚本命令组成的hash对象,他们在包不同的生命周期中被执行。key是生命周期事件,value是要运行的命令。

    参考上面的npm startnpm test命令

    更多详细请看 npm-scripts(7)

    config

    "config" hash可以用来配置用于包脚本中的跨版本参数。在实例中,如果一个包有下面的配置:

    {
     "name" : "foo",
     "config" : { "port" : "8080" } 
    }

    然后有一个“start”命令引用了npm_package_config_port环境变量,用户可以通过npm config set foo:port 8001来重写他。

    参见 npm-config(7) 和 npm-scripts(7)

    dependencies

    依赖是给一组包名指定版本范围的一个hash。这个版本范围是一个由一个或多个空格分隔的字符串。依赖还可以用tarball或者git URL。

    请不要将测试或过渡性的依赖放在dependencieshash中。见下文的devDependencies

    详见semver(7).

    • version 必须完全和version一致
    • >version 必须比version
    • >=version 同上
    • <version 同上
    • <=version 同上
    • ~version 大约一样,见semver(7)
    • 1.2.x 1.2.0, 1.2.1, 等,但不包括1.3.0
    • http://... 见下文'依赖URL'
    • * 所有
    • "" 空,同*
    • version1 - version2 同 >=version1 <=version2.
    • range1 || range2 二选一。
    • git... 见下文'依赖Git URL'
    • user/repo 见下文'GitHub URLs'

    比如下面都是合法的:

    复制代码
    复制代码
    { "dependencies" :
      { "foo" : "1.0.0 - 2.9999.9999"
      , "bar" : ">=1.0.2 <2.1.2"
      , "baz" : ">1.0.2 <=2.3.4"
      , "boo" : "2.0.1"
      , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
      , "asd" : "http://asdf.com/asdf.tar.gz"
      , "til" : "~1.2"
      , "elf" : "~1.2.3"
      , "two" : "2.x"
      , "thr" : "3.3.x"
      }
    }
    复制代码
    复制代码

    devDependencies

    如果有人要使用你的模块,那么他们可能不需要你开发使用的外部测试或者文档框架。

    在这种情况下,最好将这些附属的项目列在devDependencies中。

    这些东西会在执行npm link或者npm install的时候初始化,并可以像其他npm配置参数一样管理。详见npm-config(7)

    对于非特定平台的构建步骤,比如需要编译CoffeeScript,可以用prepublish脚本去实现,并把它依赖的包放在devDependency中。(译者注:prepublish定义了在执行npm publish的时候先行执行的脚本)

    比如:

    复制代码
    复制代码
    { "name": "ethopia-waza",
      "description": "a delightfully fruity coffee varietal",
      "version": "1.2.3",
      "devDependencies": {
        "coffee-script": "~1.6.3"
      },
      "scripts": {
        "prepublish": "coffee -o lib/ -c src/waza.coffee"
      },
      "main": "lib/waza.js"
    }
    复制代码
    复制代码

    prepublish脚本会在publishing前运行,这样用户就不用自己去require来编译就能使用。并且在开发模式中(比如本地运行npm install)会运行这个脚本以便更好地测试。

     

    参考其他资料:

    https://docs.npmjs.com/#cli

    https://github.com/ericdum/mujiang.info/issues/6/

    https://segmentfault.com/a/1190000004221514

     

    出处:http://peunzhang.cnblogs.com/

    展开全文
  • npm 安装详细教程(cnpm)

    2018-09-10 13:50:35
    1、下载nodejs windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows ... 2、安装过程 安装过程基本直接“NEXT”就可以了。...(windows的安装msi文件在过程中会直接添加path的系统变量,变量值是你...
  • npm

    2017-03-23 15:32:17
    npm常用
  • npm 更新到最新版

    2019-10-11 11:03:53
    npm 迅速更新到最新版本 终端指令: npm install -g npm 如果终端出现一大堆 npm WARN, 和 npm ERR! 的信息(如下图) npm WARN npm ERR! 信息的最后显示如下图的信息: npm ERR! 那就是你的权限...
  • npm入门教程

    2018-12-09 19:52:47
    npm入门教程: 1.初始化项目 npm init -y / npm init -force 2.包安装 安装生产阶段的包:npm install jquery --save 安装开发阶段的包: npm install jquery --save-dev 只安装生产环境的包,删除包,然后输入 npm...
  • Npm

    2018-08-10 13:19:59
    npm其实是Node.js的包(代码模块)管理工具(package manager)。它的主要功能就是管理node包,包括:安装、卸载、更新、查看、搜索、发布等。为啥我们需要一个包管理工具呢?因为我们在Node.js上开发时,会用到很多...
  • npm是什么?

    2018-07-10 09:34:46
    一、npm是什么 npm(node package manager)为你和你的团队打开了连接整个JavaScript天才世界的一扇大门。它是世界上最大的软件注册表,每星期大约有30亿次的下载量,包含超过600000个包(即代码模块)。来自各大洲的...
  • 一、什么是npm和cnpm npm(node package manager):nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等) cnpm:因为npm安装插件是从国外服务器下载,受网络的影响比较大,可能会出现异常,如果npm...
  • 有很多方法来配置npm的registry地址,下面根据不同情境列出几种比较常用的方法。以淘宝npm镜像举例: 1.临时使用npm --registry https://registry.npm.taobao.org install express2.持久使用npm config set ...
  • 在安装nodejs时候,有时候我们会把它安装在d盘或别的盘时,经常会遇到npm环境变量没有配好,需要自己手动去配置。 在安装完nodejs后输入node --version查看安装是否成功,若成功会出现下图 接着我们在使用npm...
  • 有了npm 我们能够简单的一段代码就下载我们需要的包,但是包是不断更新的,所以我们要关注包的版本信息;现在,假设我们需要 jquery ,但是jquery现在有很多版本,我们如何通过npm查看呢?要知道,现在的jquery包在...
  • 强烈推荐30个原生JavaScript的demo,包括canvas时钟特效...将npm的注册表源设置为国内的镜像 1、国内用户,建议将npm的注册表源设置为国内的镜像,可以大幅提升安装速度 2、国内优秀npm镜像推荐及使用:http://rin...
  • 利用npm 安装删除模块

    2018-12-19 13:55:13
    npm安装模块 【npm install xxx】利用 npm 安装xxx模块到当前命令行所在目录; 【npm install -g xxx】利用npm安装全局模块xxx; 本地安装时将模块写入package.json中: 【npm install xxx】安装但不写入package....
  • npm config set proxy=http://127.0.0.1:8087 npm config set registry=http://registry.npmjs.org 关于https 经过上面设置使用了http开头的源,因此不需要设https_proxy了,否则还要增加一句: npm config ...
  • 去年曾遇到过执行npm某项命令时提示要求更高版本的npm,当时百度解决了,今天又再次遇到该问题。现记下来,以供以后参考。命令行运行:npm install -g npmnpm就自动为我们更新到最新版本
  • npm ERR! code ELIFECYCLE npm ERR! errno 2 npm ERR! @ development: `cross-env NODE_ENV=development
  • npm WARN Local package.json exists, but node_modules missing, did you mean to install? 解决方法: 输入npm install 或 cnpm install 后,再次启动 npm run dev 成功启动! 2 10% building 8/9 modules 1 ...
1 2 3 4 5 ... 20
收藏数 287,790
精华内容 115,116
关键字:

npm