npm基础知识和命令

记录汇总npm基础知识和命令,拯救我的鱼记忆

npm是什么?


npm全称Node Package Manager,是node.js的模块依赖管理工具,它有一个日益强大的对手叫yarn,yarn是Facebook发布的一款依赖管理工具。

npm的使用场景:

上传分享自己写的程序代码(包),下载别人写的程序代码(包)。

npm的组成:

  • npm官网(https://www.npmjs.com/),用来管理设置上面的代码程序包
  • 一个大数据库,大家分享的程序就放在那里
  • 命令行工具(CLI),我们通过CLI来与npm交流

npm怎么安装与升级


与NodeJs一起集成安装,安装NodeJS时安装npm。

查看npm版本

npm -v
#6.5.0

查看帮助

npm help <command>

升级npm

npm install npm -g
npm install npm@latest -g #升级到最新版本

包是什么?


npm的核心是包,npm将它管理的程序都叫包,每个包里有个package.json文件,位于包的根目录下,用于定义包的属性(配置信息),比如包的名称、版本、许可证等等。
在进行npm install命令时,就是根据这个配置文件,来自动下载这个包所需的模块,配置项目所需的运行和开发环境。

package.json

package.json是一个JSON对象,每一个键值对就是当面包的一个配置。
一个package.json常用字段:

{
    "name": "Hello World", //包名
    "version": "0.0.1",//包的版本号,主版本.次版本.补丁版本
    "author": "张三",//包的作者,格式设置:Your Name <email@example.com> (http://example.com)
    "description": "第一个node.js程序",//包的描述
    "keywords":["node.js","javascript"],//包的关键词
        "main":"index.js",//main 字段指定了程序的主入口文件,require('moduleName') 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。
    "repository": {// 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
        "type": "git",
        "url": "https://path/to/url"
    },
    "license":"MIT",//包的版权协议
    "engines": {"node": "0.10.x"},//该模块运行的平台,比如 Node 的某个版本或者浏览器
    "bugs":{"url":"http://path/to/bug","email":"bug@example.com"},
    "contributors":[{"name":"李四","email":"lisi@example.com"}],//包的其他贡献者姓名
    "scripts": {//运行脚本命令的npm命令行缩写,执行命令:npm run <命令名>
        "start": "node index.js"
    },
        "config":{//添加命令行的环境变量
                "port":"8080"//可以在js中通过process.env.npm_package_config_port获取,可以通过npm config set <包名>:port 80修改
        },
        "browser": {//供浏览器使用的版本
                "tipso": "./node_modules/tipso/src/tipso.js"
        },
    "dependencies": {//项目运行依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 * node_module 目录下
        "express": "latest",
        "mongoose": "~3.8.3",
        "handlebars-runtime": "~1.0.12",
        "express3-handlebars": "~0.5.0",
        "MD5": "~1.2.0"
    },
    "devDependencies": {//项目开发依赖包列表
        "bower": "~1.2.8",
        "grunt": "~0.4.1",
        "grunt-contrib-concat": "~0.3.0",
        "grunt-contrib-jshint": "~0.7.2",
        "grunt-contrib-uglify": "~0.2.7",
        "grunt-contrib-clean": "~0.5.0",
        "browserify": "2.36.1",
        "grunt-browserify": "~1.3.0",
    }
}

依赖包版本格式:

  1. 指定:1.2.2
  2. ~+指定:~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2,小于1.3.x)
  3. ^ + 指定版本:^1.2.2,表示安装1.x.x的最新版本,(不低于1.2.2,小于2.x.x)
  4. latest:最新版本
    ## package.json生成方式:
  5. 手写
  6. 执行npm init生成

依赖包写入package.json

不在package.json的包要写入,使用--save 或者--save-dev

npm install express --save     # 将该模块写入dependencies属性
npm install express --save-dev   #将该模块写入devDependencies属性

下载安装、卸载、更新包


安装方式(全局安装与本地安装)

npm install express          # 本地安装
npm i express              #简写
npm install express -g   # 全局安装
  • 全局安装:安装包放在 /usr/local 下或者你 node 的安装目录,可以在命令行直接使用
  • 本地安装:安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),没有时会自动创建,通过 require() 来引入本地安装的包

引用下载的包

//var <Module Name>= require('<Module Name>');
var express = require('express');

卸载包

npm uninstall express   #删除node_modules目录下面的包
npm uninstall --save express      #删除node_modules的包和package.json中的运行时依赖
npm uninstall --save-dev express      #删除node_modules的包和package.json中的开发依赖
npm uninstall -g express #全局卸载

更新包

npm update express
npm update express -g # 更细全局包

查询包的信息


查看安装包信息

npm list    #查看本地安装包信息
npm list -g  #查看全局安装包信息
npm list express #查看某个安装包信息
npm ls    #npm list简写
image.png

提升下载包的速度

由于npm的包大多是在国外数据库,下载速度会受到影响,我们想快一点,可以使用国内的淘宝镜像。
淘宝NPM镜像是一个完成的npmjs.org镜像,基本与官网服务一致。

镜像地址

淘宝镜像:

使用淘宝镜像

临时使用淘宝镜像

#安装包时临时制定镜像地址
npm --registry https://registry.npm.taobao.org install express

持久使用淘宝镜像

先配置npm镜像,然后再安装包
配置镜像:

npm config set registry https://registry.npm.taobao.org  #设置成淘宝镜像
npm config set registry https://registry.npmjs.org/    #设置成官网的

监测是否设置成功

npm config get registry   #查询镜像地址
npm info express #查询镜像地址

使用cnpm来使用淘宝镜像

安装cnpm

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

使用cnpm安装包

cnpm install [name]

使用nrm来管理切换npm源

nrm专门用来管理和快速切换私人配置的registry。

安装

npm install -g nrm

列出可选源

nrm ls

切换源

nrm use taobao

增加源

nrm add <源名称> <源地址>   #比如企业或组织有自己的私有源(镜像)时

删除源

nrm del

测试源响应

nrm test   #测试所有源
nrm test npm  #测试npm官方源

如何创建和发布自己的包


创建模块

npm init

image.png

此时,生成了package.json配置文件

增加入口文件

默认的入口文件是根目录下的index.js,在根目录下创建index.js

//index.js
exports.printMsg = function() {
    console.log("This is a message from the demo package");
}

登录或注册npm账号

npm adduser  #注册npm账号
npm login #登录npm账号

发布包

发布包之前,我们需要做两步:

  1. 修改CHANGE.MD,这里记录了我们包发布的版本变化情况,格式自定
  2. 修改package.json中的version字段,表示这次发布的包的版本,如果不修改,发布会报错。
    发布包:
npm publish

撤销发布

撤销发布自己发布过的某个版本代码

npm unpublish <package>@<version>

发布成功之后,这个包就可以通过npm install命令来进行安装了。

管理包的版本

当我们下载和发布我们的包时,都会关注到包的版本号,npm使用语义版本号来管理包。
语义版本号组成:X.Y.Z

  • X代表主版本号,表示有大变动,向下不兼容
  • Y代表次版本号,表示新增功能,向下兼容
  • Z代表补丁版本号,表示修复BUG

参考资料:
官网:https://www.npmjs.com.cn/getting-started/installing-npm-packages-locally/
菜鸟教程:https://www.runoob.com/nodejs/nodejs-npm.html
npm脚本使用:http://www.ruanyifeng.com/blog/2016/10/npm_scripts.html
package.json说明:http://javascript.ruanyifeng.com/nodejs/packagejson.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容

  • npm是什么 NPM的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具...
    build1024阅读 7,873评论 0 9
  • NPM NPM 是随同 Node 一起安装的包管理工具,能解决 Node 代码部署上的很多问题,常见的使用场景有以...
    heyi_let阅读 2,578评论 0 2
  • 本文参考:2018 年了,你还是只会 npm install 吗?npm 官方文档package.json文件 -...
    双面小Q阅读 4,817评论 1 9
  • Node的包管理器 JavaScript缺少包结构的定义,而CommonJS定义了一系列的规范。而NPM的出现则是...
    IT老马阅读 2,842评论 0 5
  • 描述 npm从以下来源获取配置值,按优先级排序: 命令行标记 在命令行上放置--foo bar设置foo配置参数为...
    竹天亮阅读 44,140评论 0 8