npm是什么
npm简介
维基百科中npm定义
npm完全用JavaScript写成,最初由艾萨克·施吕特(Isaac Z. Schlueter)开发。
艾萨克表示自己意识到“模块管理很糟糕”的问题,并看到了PHP的PEAR与Perl的CPAN等软件的缺点,于是编写了npm。
npm可以管理本地项目的所需模块并自动维护依赖情况,也可以管理全局安装的JavaScript工具。
如果一个项目中存在package.json文件,那么用户可以直接使用npm install命令自动安装和维护当前项目所需的所有模块。
在package.json文件中,开发者可以指定每个依赖项的版本范围,这样既可以保证模块自动更新,又不会因为所需模块功能大幅变化导致项目出现问题。开发者也可以选择将模块固定在某个版本之上。
简言之,npm是node package management,是一款包管理工具。
安装npm
Node.js安装包中包括npm,下载地址https://nodejs.org/en/download/releases/
下载node.js,例如10.11.0
安装一个包
如何使用npm进行包管理呢?
本地安装
使用如下命令,可以安装一个包
# npm install <package name>
会在当前目录下创建node-modules,将要安装的包放置在这个目录下。
并在package.json文件依赖选项中添加相应的包。
npm install 如果不带任何参数,会从package.json获取要安装的依赖包和版本,并进行安装。
全局安装
如果你想将其作为一个命令行工具,那么你应该将其安装到全局。这种安装方式后可以让你在任何目录下使用这个包。比如 grunt 就应该以这种方式安装。
# npm install -g <package name>
例如
npm install -g jshint
package.json文件
在本地目录中如果没有 package.json 这个文件的话,那么最新版本的包会被安装。
如果存在 package.json 文件,则会在 package.json 文件中查找针对这个包所约定的语义化版本规则,然后安装符合此规则的最新版本。
文件内容格式example
{
"name": "my-awesome-package",
"version": "1.0.0"
}
创建package.json文件
执行命令,创建package.json文件
执行过程中,会进行配置项的选择。
# mkdir my-vue-proj
# cd my-vue-proj
# npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (my-vue-proj)
version: (1.0.0)
description: npm test example
entry point: (index.js)
test command:
git repository:
keywords:
author: lanyang
license: (ISC)
About to write to /Users/zhangyunyang/workspace/my-vue-proj/package.json:
{
"name": "my-vue-proj",
"version": "1.0.0",
"description": "npm test example",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "lanyang",
"license": "ISC"
}
Is this ok? (yes) yes
查看当前目录
# ls
package.json
可以看到已经创建了package.json文件
也可以直接执行命令,创建一个默认的package.json
# npm init --yes
文件各个选项的含义
- name: the current directory name
- version: always 1.0.0
- description: info from the readme, or an empty string ""
- main: always index.js
- scripts: by default creates an empty test script
可以这样使用: # npm test or npm run test - keywords: empty
- author: empty
- license: ISC
package.json文件中的Dependencies
两种类型的依赖
- "dependencies": These packages are required by your application in production.
- "devDependencies": These packages are only needed for development and testing.
一个是针对生产环境的,另一个是针对测试环境。
安装一个包后,package.json文件的变化
例如
# npm install lodash
安装包后package.json文件内容如下
{
"name": "my-vue-proj",
"version": "1.0.0",
"description": "npm test example",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "zyy",
"license": "ISC",
"dependencies": {
"lodash": "^4.17.11"
}
}
如何更新安装的包
本地安装包
执行以下两个步骤:
- 在 package.json 文件所在的目录中执行 npm update 命令
- 执行 npm outdated 命令,不应该有任何输出。
全局安装包
对于全局安装包,更新执行如下命令:
npm update -g <package>
例如,
npm update -g jshint
查找哪些全局包需要更新:
# npm outdated -g --depth=0.
更新所有全局的包:
npm update -g.
如何卸载安装的包
本地安装包
如需删除 node_modules 目录下面的包(package),请执行:
npm uninstall
# npm uninstall <package>
// 例如
# npm uninstall lodash
如需从 package.json 文件中删除依赖,需要在命令后添加参数 --save:
npm uninstall --save lodash
注意:如果你将安装的包作为 "devDependency"(也就是通过 --save-dev 参数保存的),那么 --save 无法将其从 package.json 文件中删除。所以必须通过 --save-dev 参数可以将其卸载。
全局的安装包
通过如下命令将包(package)安装到全局:
# npm uninstall -g <package>
例如安装 jshint 包到全局,使用如下命令:
# npm uninstall -g jshint
package和module区别
- A package is a file or directory that is described by a package.json. This can happen in a bunch of different ways! For more info, see "What is a package?, below.
- A module is any file or directory that can be loaded by Node.js' require(). Again, there are several configurations that allow this to happen. For more info, see "What is a module?", below.
参考
npm是什么的更多相关文章
- 网络原因导致 npm 软件包 node-sass / gulp-sass 安装失败的处理办法
如果你正在构建一个基于 gulp 的前端自动化开发环境,那么极有可能会用到 gulp-sass ,由于网络原因你可能会安装失败,因为安装过程中部分细节会到亚马逊云服务器上获取文件.本文主要讨论在不变更 ...
- npm 私有模块的管理使用
你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...
- NPM (node package manager) 入门 - 基础使用
什么是npm ? npm 是 nodejs 的包管理和分发工具.它可以让 javascript 开发者能够更加轻松的共享代码和共用代码片段,并且通过 npm 管理你分享的代码也很方便快捷和简单. 截至 ...
- Npm包的开发
个人开发包的目录结构 ├── coverage //istanbul测试覆盖率生成的文件 ├── index.js //入口文件 ├── introduce.md //说明文件 ├── lib │ ...
- npm package.json属性详解
概述 本文档是自己看官方文档的理解+翻译,内容是package.json配置里边的属性含义.package.json必须是一个严格的json文件,而不仅仅是js里边的一个对象.其中很多属性可以通过np ...
- npm 使用小结
本文内容基于 npm 4.0.5 概述 npm (node package manager),即 node 包管理器.这里的 node 包就是指各种 javascript 库. npm 是随同 Nod ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
- 升级npm
查看npm的所有版本 运行命令: npm view npm versions 命令运行后,会输出到目前为止npm的所有版本. [ '1.1.25', '1.1.70', '1.1.71', '1.2. ...
- NPM如何更新到最新版
参考文章--npm更新到最新版本的方法 其实我们可以这样,随便新建一个文件夹例如:F:\test.按着"shift"键,右键该文件夹,选择"在此处打开命令窗口(W)&qu ...
- npm源切换
版权声明:欢迎转载,请附加转载来源:一路博客(http://www.16boke.com) 目录(?)[+] 安装 使用 列出可选的源 切换 增加源 删除源 测试速度 许可 项目主页 我们介绍 ...
随机推荐
- 解决 java.lang.ClassNotFoundException: javax.servlet.ServletContext报错
原因:tomcat找不到servlet,即缺少了servlet-api.jar包 解决方法: 我的项目是用maven搭建的 在pom.xml中加入依赖 <dependency> <g ...
- java学习笔记21(迭代器)
java中有很多集合,内部有各种的存储的方法,取出的方法也各不相同,那么有没有一种通用的方法来取出来呢? java提供的遍历集合元素的方法有两种: 1.for-each结构(增强型for循环) 格式: ...
- 本周java 学习进度报告
本周java 学习进度报告 本周对我的感触很深,因为这是我初学java 语言的第一周,我认识到java 和c语言是有很多的不同之处和相同之处.我这几天几乎是在研究java 基础入门知识,而并没有太多的 ...
- HDU 1166 敌兵布阵(线段树点更新区间求和裸题)
Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任 ...
- Wget用法、参数解释的比较好的一个文章
wget是一个从网络上自动下载文件的自由工具.它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理. 所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行.这意味这你可以登录系统,启 ...
- char *s 和 char s[] 的区别
最近的项目中有不少c的程序,在与项目新成员的交流中发现,普遍对于char *s1 和 char s2[] 认识有误区(认为无区别),导致有时出现“难以理解”的错误.一时也不能说得很明白,网上也搜了一下 ...
- JavaBasic_09
方法的参数传递 方法调用时参数值的传递可以分为"值传递"和"引用传递"两种 值传递 - a.当方法的参数为基本数据类型时 b.实参的值被复制给形参,改变形参不会 ...
- NYOJ 737:石子合并(一)(区间dp)
737-石子合并(一) 内存限制:64MB 时间限制:1000ms 特判: No 通过数:30 提交数:37 难度:3 题目描述: 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆. ...
- hdu1542 Atlantis 线段树--扫描线求面积并
There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some ...
- 打开网页直接弹出qq对话框?
代码一: http://wpa.qq.com/msgrd?v=3&uin=此处输入QQ号&site=qq&menu=yes 代码二: <iframe src=" ...