【转】npm包管理器那些事
原文链接:http://www.cnblogs.com/shuoer/p/7782125.html
npm包管理器那些事!
今天和朋友针对npm包全局安装和本地项目安装这个梗展开的激烈的讨论,故此做一个总结!
什么是包管理器?
我最早接触这个概念的时候是在linux上(redhat小红帽),记得当时要编译安装一个apache,安装的过程坎坷到了极点,不是缺少这个包就是这个包依赖那个包,更有甚是你明明所有的包都有,唯独安装顺序颠倒了也会报错,所以当时接触了yum包管理器(神器啊)一条命令yum install apache 完活。(后续有时间详细介绍)
从此时我对linux产生了浓厚的兴趣,后来慢慢接触了ubuntu不管是从界面还是操作上比redhat上升了不是一个台阶啊(个人见解),故此我接触了第二个包管理器 apt-get(后续有时间详细介绍)
自从开始做前端开发之后学习node接触了node的包管理器npm,淘宝的cnpm以及FaceBook开发的yarn
说了这么多它们能干什么有什么用呢它们有什么区别呢?
所有的包管理器都有一个共同的目标,安装、管理、解决你的安装包依赖
它们的特点
yum和apt-get这里不做介绍,主要针对npm、cnpm、yarn
yarn
yarn是FaceBook开发的包管理器-- 解决npm历史遗留的痛点
特点
- 极速,Yarn 会缓存它下载的每个包,所以不需要重复下载
- 安全,Yarn 在每个安装包的代码执行前使用校验码验证包的完整性。
具体的使用请移驾Yarn官网手册
npm
npm全称Node Package Manager,他是node包管理和分发工具
由于npm的软件源地址在国外,所以会出现速度慢很多包安装不上时候
解决方案一
//通过config命令:先运行以下命令,再安装node包即可
npm config set registry http://registry.cnpmjs.org
npm install webpack
通过上面的命令实际的意识是告诉npm你下载包的时候给我从这个地址下载
解决方案二 cnpm
cnpm只不过是npm在国内的镜像
//cnpm方式安装:先安装cnpm,再利用cnpm安装,例如webpack等
npm install -g cnpm
cnpm install -g webpack
npm和cnpm的区别

npm install 本地安装与全局安装的区别
npm的包安装分为本地安装(local)、全局安装(global)两种,比如:
//安装在本地
npm install webpack
//安装在本地并添加进package.json版本依赖中
npm install webpack --save-dev
//全局安装
npm install -g webpack
- 本地安装
- 将安装包放在./node_modules/
- 可以通过require()来引入本地安装的包
例如:
npm install karma --save-dev安装成功之后会在你当前目录中的node_modules/karma
我们使用的时候直接require('karma')就可以使用
此时全局没有安装karma那么命令行怎么办?//搞定
node_modules/karma/bin/karma init - 全局安装
- 将安装包放在/usr/local下
可以直接在命令行中直接使用
例如://安装全局的karma
npm install -g karma
//全局安装之后记得在本地安装下并添加进版本依赖中
npm install katma --save-dev
//全局安装完成之后就可以在命令行中直接执行
karma initok到这里问题都出来了
全局安装报错
如果您是linux或者Mac Os 系统并且非root用户会出现如下报错

这是因为全局安装的模块是安装在了/usr/local/下,您当前的用户没有对/usr/local目录的写入权限导致的,解决办法:
//意思就是要用管理员的身份去执行
//super user do npm install -g karma
sudo npm install -g karma
//此时输入您的登陆密码就可以了
使用npm脚本
首先先说一下何为全局?又何为本地安装?
抛开package.json的版本依赖先不说,这两种安装方式只不过是安装的位置不同罢了!咱们翻译下全局安装和本地安装这两条命令
//上面说了全局安装的是/usr/local/其实全局安装只不过是给你添加了一个环境变而已
//karma="/usr/loacl/bin/node_modules/karma/bin/karma"
karma init --> /usr/loacl/bin/node_modules/karma/bin/karma init
//翻译下本地安装,就是安装在你的当前项目中的node_modules
./node_modules/karma/bin/karma init
什么是npm脚本?
npm 允许在package.json文件里面,使用scripts字段定义脚本命令。
"scripts": {
"start": "node server.js",
"karma":"karma start"
}
执行的时候npm run karma
这些定义在package.json里面的脚本,就称为 npm 脚本。
npm run在执行的时候会将当前目录的node_modules/.bin子目录加入PATH变量,执行结束后,再将PATH变量恢复原样。
所以咱们没有必要写成下面这样
"scripts": {
"karma":"node_modules/karma/bin/karma start"
}
npm脚本的钩子
npm 脚本有pre和post两个钩子,比如:
"scripts": {
"pretest":"karma start",
"test":"karma start",
"posttest":"opener http://localhost:9090"
}
当执行npm run test的时候它们会一次执行
npm run pretest && npm run test && posttest
如何利用npm脚本去优雅的装逼
咱们可以利用npm脚本钩子的特性可以这么玩
{
"name": "karmademo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "karma start",//提供一个单独的单元测试脚本
"prestart": "npm install && karma start",//start开始前先下载所有的依赖包并且跑一边单元测试
"start": "pm2 serve ",//用pm2去启动一个简单的服务器
"poststart": "opener http://localhost:8080",//用opener打开浏览器并打开项目网址
"stop": "pm2 stop all",//提供一个停止服务的脚本
"restart": "pm2 stop all && npm start"//提供一个重启服务器的脚本
},
"author": "",
"license": "ISC",
"devDependencies": {
"jasmine-core": "^2.8.0",
"jquery": "^3.2.1",
"karma": "^1.7.1",
"karma-jasmine": "^1.1.0",
"karma-phantomjs-launcher": "^1.0.4",
"opener": "^1.4.3",
"pm2": "^2.7.2",
"serve": "^6.4.0",
"systemjs": "^0.20.19",
"systemjs-plugin-babel": "0.0.25"
}
}
在命令行中的执行结果是这个样子的
npm start

npm stop

npm restart

github项目地址:https://github.com/zhaoshuoer/praiseButton
本文参考地址:https://www.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/
【转】npm包管理器那些事的更多相关文章
- NPM包管理器入门(附加cnpm : 无法加载文件错误解决方案)
NPM 包管理器 1.作用: 快速构建nodejs工程 快速安装和依赖第三个模块 2.使用方法 快速构建 npm init 会得到一package.json文件 { "name": ...
- Node.js_简介及其 npm 包管理器基本使用_npm_cnpm_yarn_cyarn
Node.js 既是语言也是平台,跳过了 Apache.Nginx 等 HTTP 服务器,直接面向前端开发 JavaScript 是由 ECMAScript.文档对象模型(DOM)和浏览器对象模型(B ...
- 关于 npm 包管理器最常用的内容都在这儿了
Nodejs的诞生,给前端开发世界带来了翻天覆地的变化. 前端工程化,各种工具,以及向后端的能力扩展. 车子离不开轮子,node(前后端)开发离不开npm这个包管理工具,在这总结下常用配套工具: np ...
- npm包管理器报错-npm ERR! Response timeout while trying to fetch https://registry.npmjs.org/@XXX(over 30000ms)
由于这两天买的新电脑在短期内频频蓝屏.卡机,不得不把自己其他的本本拿出来换上,但是程序员换电脑是真的痛苦,其他不说就说一个配环境 真的折腾哈 我是一名前端菜鸟,现在自己的本本上使用的是npm包管理工具 ...
- NPM(包管理器)作用是什么?
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: a.允许用户从NPM服务器下载别人编写的第三方包到本地使用 b.允许用户从NPM服务器 ...
- npm包管理器相关知识
关于npm包安装命令的介绍,如下图:
- npm包管理器小节一下
淘宝npm镜像cnpm设置 npm install -g cnpm --registry=https://registry.npm.taobao.org 更新npm的版本 npm install np ...
- 修改npm包管理器的registry为淘宝镜像(npm.taobao.org)
起因 安装了node,安装了npm之后,官方的源实在是 太慢了! 看了看淘宝的npm镜像, http://npm.taobao.org/ 竟然说让我再下载一个cnpm,要不然就每次都得install ...
- WebStorm中使用npm包管理器
1.首先安装Node.js,安装之后添加NodeJs的安装路径到系统Path环境变量,在控制台之中测试node,与npm命令是否工作正常. 2.配置npm的源为国内的淘宝镜像,这里不推荐使用cnpm ...
随机推荐
- fedora 19 gnome 3.8 关闭笔记本盖子的动作
gnome-tweak-tool里没有了相关选项,但是又想让关闭盖子不挂起,后来看看才知道gnome3.8不再提供这功能,而是交给systemd来处理,所以估计用dconf-edit在gnome的po ...
- 如何通过C#操作Access,本人亲测通过
1. c# 操作access数据库 // it's your DB file path: // ApplicationEXEPath\Test.mdb var DBPath = "d:\\T ...
- Java基础(00)
Java发展史 Java之父:詹姆斯.高斯林(James Gosling). SUN(Stanford University Network 斯坦福大学网络公司)产物. 1995年5月23日,java ...
- vue数据请求
我是vue菜鸟,第一次用vue做项目,写一些自己的理解,可能有些不正确,欢迎纠正. vue开发环境要配置本地代理服务.把config文件加下的index.js里的dev添加一些内容, dev: { e ...
- Linux系列教程(九)——Linux常用命令之网络和关机重启命令
前一篇博客我们讲解了Linux压缩和解压缩命令,使用的最多的是tar命令,因为现在很多源码包都是.tar.gz的格式,通过 tar -zcvf 能完成解压.然后对于.zip格式的文件,使用gunzip ...
- 如何在Pypi上发表自己的Python库
背景 最近兴趣使然写了几个Python库,也发布到了Pypi上,虽然没什么人下载,但自己在其他机器上用着也会很方便.这里我向大家介绍一下如何在Pypi上发表自己的Python库. 准备 注册账号 很显 ...
- Linux驱动模型解析bus之platform bus
这是内核启动之后要调用的驱动模型的开始代码: drivers/base/init.c/** * driver_init - initialize driver model. * * Call the ...
- tomcat默认日志路径更改
在项目访问量不断增加时,tomcat下logs也迅速增大,有时甚至因为填满了所在分区而出现无空间写入日志而导致程序出问题. 这时要更改logs的默认目录,指向更大的磁盘.修改主要有两步: 1. 修改t ...
- Hadoop部署配置文件
为了方便大家修,我把要修改的地方标红了,找到对应文件,复制粘贴过去就可以了 注:这个是我安装的Hadoop的配置,要根据我之前发的文章配置才行, 里面有一些东西比如文件夹名称,路径不一样,稍加修改也可 ...
- sass学习--在htm文件中使用
一.导语 最近的战狼2好火爆啊,每天看战狼2的票房一路高飙,我估计比吴京还开心.看了这部戏的拍摄过程,除了敬佩就是踏实,是的,吴京是电影圈隔了这么久后能踏踏实实做电影的了,纯属个人见解,不喜请忽略.. ...