NPM
简介
npm全称node package manager,是node包管理和分发工具。可以理解为前端的maven。通过npm可以很方便的下载js库,管理前端工程。node已经集成npm工具,在cmd中输入npm -v
查看当前npm版本。
参考资料
认识 npm
发展简介
- npm:npm是一个JavaScript的包管理程序(Node Package Manager)—>类似与java的maven
- npm的由来:当一个项目依赖的代码越来越多,程序员发现这是一件很麻烦的事情:
- 我要去哪里下载我要的第三方依赖?
- 我要用什么版本?
- 如何更新我已经使用的第三方依赖?
- 等等。。。。。。
- 有些程序员就受不鸟了,一个拥有三大美德的程序员 Isaac Z. Schlueter (以下简称 Isaaz)给出了一个解决方案:用一个工具把这些代码集中到一起来管理吧!这个工具就是他用 JavaScript (运行在 Node.js 上)写的 npm,全称是 Node Package Manager
介绍
npm(全称Node Package Manager,即node包管理器)
是Node.js默认的、以JavaScript编写的软件包管理系统
npm 来分享和使用代码已经成了前端的标配
npm被全球超过1100万开发人员所依赖
拥有超过一百万个软件包,是世界上最大的软件注册表
npm的思路大概是这样的:
- 买个服务器作为代码仓库(repository),在里面放所有需要被共享的代码
发邮件通知 jQuery 、Bootstrap 、Underscore 的作者使用 npm publish 把代码提交到 repository 上,分别取名 jquery、bootstrap 和 underscore(注意大小写)
- 社区里的其他人如果想使用这些代码,就把 jquery、bootstrap 和 underscore 写到 package.json 里,然后运行 npm install ,npm 就会帮他们下载代码
- 下载完的代码出现在 node_modules 目录里,就可以随意使用了。
这些可以被使用的代码被叫做「包」(package),这就是 npm名字的由来:Node Package(包) Manager(管理器)。
安装 npm
- npm是Node.js默认的软件包管理系统
- 安装完毕node后,会默认安装好npm
- npm本身也是基于Node.js开发的软件
- 下载Node: http://nodejs.cn/download/ 下载对应的安装包进行安装
- npm 的发展是跟 node.js 的发展相辅相成的。node.js 是由一个在德国工作的美国程序员 Ryan Dahl 写的。他写了 node.js,但是 node.js 缺少一个包管理器,于是他和npm的作者一拍即合、抱团取暖,最终 node.js 内置了 npm
使用 npm工具管理包
1 | #查看node版本 |
- *注:*安装Node时默认安装npm
- 需要安装包时先进入项目根路径然后通过npm install
进行安装,安装时自动递归创建node_modules文件夹和包文件夹 - devDependencies:开发时的依赖,里面的模块都是开发时候用的,发布发到正式环境以后就用不到它了,比如项目中使用的测试模块,调试的一些东西还有gulp,压缩css、js的module
- dependencies:运行时的依赖,发布后即在生产环境还是需要用到的模块
- 不加-save参数默认是开发时依赖
package.json
1 | #生成 package.json 文件(加 --yes 参数即为赋予默认值,不加的话也可以一个个参数进行设置,可用 默认值然后去 package.json 文件中再次修改) |
模块的基本应用
- 没有webpack之前搜寻整个 node_modules 目录来定位每个包的路径再手动添加到我们 HTML 文件中(实在太太不方便了,示例如下 先引入路径后使用模块)
1 |
|
- 大多数编程语言都会提供从一个文件导入另一个文件代码的机制。然而 JavaScript 最初设计时并没有这个特性,因为 JavaScript 原本是为了在浏览器端运行而设计的,并没有权限获取计算机客户端的文件系统(安全考虑)。所以很长一段时间以来,组织多个文件的 JavaScript 代码就是把每个文件下载下来,变量是全局共享的。
- CommonJS 中很大的一部分便是对模块系统的规范,
- 使用require语句导入包 (
新的ES6可以使用import导入包
)
npm 和 yarn 的对比及迁移
简介
- 官网:www.yarnpkg.com
- Yarn是由Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具 ,正如官方文档中写的,Yarn 是为了弥补 npm 的一些缺陷而出现的。因为NPM5以下会出现下面的问题:
- npm install的时候巨慢。特别是新的项目拉下来要等半天,删除node_modules,重新install的时候依旧如此。
- 同一个项目,多人开发时,由于安装的版本不一致出现bug
安装
- 方式一:下载node.js,使用npm安装
- npm install -g yarn
- 查看版本:yarn –version
- 方式二:下载yarn的安装程序:提供一个.msi文件,在运行时将引导您在Windows上安装Yarn
- Yarn 淘宝源安装,分别复制粘贴以下代码行到黑窗口运行即可
1 | yarn config set registry https://registry.npm.taobao.org -g |
基本使用
1 | yarn init //初始化项目 同npm init,执行输入信息后,会生成package.json文件 |
优点
- 速度快
- 安装版本统一
- 更简洁的输出
- 多注册来源处理
- 更好的语义化
npm 迁移值 yarn
- 可以从npm迁移到yarn,也可以从yarn迁移到npm。
- 有了yarn的压力之后,npm做了一些类似的改进,在npm5.0之前,yarn的优势特别明显。但是在npm之后,通过以上一系列对比,我们可以看到 npm5 在速度和使用上确实有了很大提升,值得尝试。
- 如果你已经在个人项目上使用 yarn,并且没有遇到更多问题,目前完全可以继续使用。但如果有兼容 npm 的场景,以及还没有切到 yarn 的项目,那现在就可以试一试 npm5 了。
实践
解决 ES6 兼容问题
ES6 的语法对于有些老的浏览器不兼容 比如定义变量 const let 这些标识符 无法识别,需要转换成 ES5 的语法,一般有
在线解决
和提前编译
两种方案比较通用的工具方案有babel,jsx,traceur,es6-shim等
IE10+、Chrome、FireFox、移动端、NodeJS现在都支持
方式一:在线解决(客户端)
:x:在线转换(通过工具包的方式,这种编译会加大页面渲染的时间,不推荐)
- 在script 中引入 babel-core 的 js 文件
- body 中注意声明
type="text/babel"
1 |
|
方式二:提前编译(服务端)
:o:提前编译(强烈建议这种方式,不影响浏览器渲染时间)
- 安装依赖
1 | # 开发环境依赖安装 babel-cli |
- 项目根路径新建.babelrc 文件
1 | { |
- 安装 es2015 对应的库
1 | # "presets": ["es2015", "stage-2"] 上面转码规则设置的 es2015 因此需要安装对应的依赖 |
- 绑定命令
1 | # package.json 文件中scripts标签新增一条指令 通过运行 npm run babel 即可把 src 目录下的文件 编译到 babelSrc 下 |
编译整个 src 目录并将其输出到 babelSrc 目录。这里的src指的是需要转换的目录,babelSrc指的是输出的内容的存放目录,-w其实是-watch的意思,就是监听文件,实时编译输出新建src目录和babelSrc目录,记得一定要建,不然会报错
,然后我们启动我们的babel工程。
命令行输入npm run babel