09、React系列之--使用yarn包管理工具

版权声明:本文为博主原创文章,未经博主允许不得转载。

PS:转载请注明出处
作者:TigerChain
地址:http://www.jianshu.com/p/f05eabdf3ab6
本文出自TigerChain简书

React系列教程

教程简介

  • 1、阅读对象

    本篇教程适合初学者,老鸟直接略过,如果有误,欢迎指出,谢谢。

  • 2、教程难度

    初级

正文

1、什么是yarn

yarn是facebook(2016年10月11日)开源的一款代替npm的js包管理工具

2、yarn的特点

相比于node的亲儿子npm来说,yarn有以下优势

  • 1、安装模块速度快
  • 2、支持离线模式(只要你安装过此模块,第二次安装就会从缓存文件中直接复制过来)
  • 3、同时兼容 npm 与 bower 工作流,并支持两种软件仓库混合使用

yarn安装依赖的过程分为三步

  • 1、处理: Yarn 通过向代码仓库发送请求,并递归查找每个依赖项,从而解决依赖关系。

  • 2、抓取: 接下来,Yarn 会查找全局的缓存目录,检查所需的软件包是否已被下载。如果没有,Yarn 会抓取对应的压缩包,并放置在全局的缓存目录中,因此 Yarn 支持离线安装,同一个安装包不需要下载多次。依赖也可以通过 tarball 的压缩形式放置在源码控制系统中,以支持完整的离线安装。

  • 3、生成: 最后,Yarn 从全局缓存中把需要用到的所有文件复制到本地的 node_modules 目录中。

npm 客户端把依赖安装到 node_modules目录的过程具有不确定性。这意味着当依赖的安装顺序不同时,node_modules 目录的结构可能会发生变化。这种差异可能会导致类似“我的机子上可以运行,别的机子不行”的情况,并且通常要花费大量时间定位与解决

Yarn 通过 lockfiles 文件以及一个确定性的、可靠的安装算法,解决了版本问题和 npm 的不确定性问题

3、安装yarn

1、在mac平台上

有多种方式,下面介绍两种

1、第一种方式使用Homebrew安装

  • 1、使用Homebrew安装

前提是要安装Homebrew

brew update brew install yarn
  • 2、配置环境变量
    添加export PATH=”$PATH:yarn global bin“到.profile或 .bashrc 或 .zshrc 文件中,以我的机子为例,打开.zshrc文件添加以下命令
export PATH="$PATH:$HOME/.yarn/bin"
  • 3、查看是否安装成功

在命令行输入以下命令,能看到版本信息则证明成功

yarn --version

2、第二种方式使用npm安装

  • 1、使用npm安装yarn
npm install yarn -g
  • 2、步骤同Homebrew安装方式
  • 3、步骤同Homebrew安装方式

2、在win平台上安装yarn

下载地址https://yarnpkg.com/latest.msi

  • 2、点击一路安装(前进是你要安装node)
  • 3、打开cmd输入yarn –version查看是否安装成功

3、Linux平台下安装yarn

这部分就不说了,非常简单,也是使用命令行安装,具体可以看官方安装方式https://yarnpkg.com/en/docs/install#linux-tab

4、yarn使用

yarn的使用方式和npm大厅相近,就是把npm的使用地方换成yarn并且添加三方模板组件使用是的yarn add xxx

我们来举例说明yarn是如何使用的,建立一个简单的demo,以React HelloWorld 项目为例来说明(使用yarn+webpack+babel),在mac环境下,win下面基本上类似

1、新建yarndemo目录并进入此目录

mkdir yarndemo
cd yarndemo

2、使用yarn init来初始化项目

yarn init
  • 1、此命令和npm一样,如果不配置的话一路回车就可以了,效果如下(此处我设置了作者和版权信息,你可以什么也不用设置)
  • 2、我们来看看yarndemo目录下发生了什么变化

我们可以看到和使用npm init结果是一样,会创建一个package.json文件

3、添加依赖(以react为例子)

  • 1、安装依赖,使用yarn add命令
yarn add react react-dom
  • 2、我们再来看看文件夹中目录变化

我们可以看到除了和npm install xxx –save 一样新建一个node_modules文件夹以外,还创建了一个yarn.lock文件

yarn.lock 锁定了安装包的精确版本以及所有依赖项。有了这个文件,你可以确定项目团队的每个成员都安装了精确的软件包版本,部署可以轻松地重现,且没有意外的 bug,并且这个文件可以使得程序在不同的机器上可以攻取一致的体验

Yarn 锁定文件的和安装算法的存在,确保了将应用程序部署到生产环境时,安装的依赖在开发机器之间,产生的文件文件夹结构完全相同。

3、安装webpack和webpack-dev-server

yarn add webpack webpack-dev-server

4、安装babel

yarn add babel-core babel-preset-es2015 babel-preset-react babel-loader

5、在根目录中新建.babelrc并输入以下内容(不理解的可以看webpack这一节:http://www.jianshu.com/p/732c4d501668)

{
  "presets":["react","es2015"] }

6、在yarndemo目录中分别新建app和public目录

  • 1、在public中新建index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <Meta charset="UTF-8">
  <Meta name="viewport" content="width=device-width,initial-scale=1.0">
  <Meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>yarn demo</title>
</head>
<body>
  <div id="container"></div>
  <script src='./bundle.js'></script>
</body>
</html>
  • 2、在app中新建main.js
import React from 'react' ;
import ReactDOM from 'react-dom' ;

ReactDOM.render(
  <h1>Hello World</h1>,document.getElementById('container')
);
  • 7、在根目录中新建webpack.config.js文件
module.exports = {
  entry: __dirname +"/app/main.js",//唯一的入口文件
    output:{
      path: __dirname +"/public",//打包后文件存放的目录
      filename:'bundle.js' //打包后输入的文件
    },devServer:{
     contentBase: "./public",//本地服务器所加载的页面所在的目录
     colors: true,//终端中输出结果为彩色
     historyApiFallback: true,//不跳转
     inline: true//实时刷新
   },//新增加部分
   module:{
     loaders:[
     //babel配置
     {
       test:/\.js$/,exclude: /node_modules/,loader: 'babel'
     }
   ]
   }
}
  • 8、在package.json中添加script脚本
"scripts":{
    "start":"webpack-dev-server --progress --port 8888"
 }
  • 9、命令行输入yarn start,打开浏览器,输入localhost:8888查看结果

到此为止,我们就使用yarn+webpack+babel完成了一个简单的hello world demo,也体验了一下yarn的使用方式,和npm使用方式差不多,只不过命令不太一样而已

5、yarn和npm命令对比

NPM YARN 说明
npm init yarn init 初始化某个项目
npm install/link yarn install/link 认的安装依赖操作
npm install taco —save yarn add taco 安装某个依赖,并且认保存到package.
npm uninstall taco —save yarn remove taco 移除某个依赖项目
npm install taco —save-dev yarn add taco —dev 安装某个开发时依赖项目
npm update taco —save yarn upgrade taco 更新某个依赖项目
npm install taco –global yarn global add taco 安装某个全局依赖项目
npm publish/login/logout yarn publish/login/logout 发布/登录/登出,一系列NPM Registry操作
npm init yarn init 初始化某个项目
npm run/test yarn run/test 运行某个命令,可以在script脚本中去配置

yarn安装慢的问题

使用以下命令来查看当前的源,认是:官网

yarn config get registry
# -> https://registry.yarnpkg.com

改成taobao的源

yarn config set registry 'https://registry.npm.taobao.org'

#yarn config v0.17.3
#success Set "registry" to "https://#registry.npm.taobao.org".
#✨ Done in 0.06s.

然后使用yarn install就应该快多了。

yarn采坑之旅

1、安装yarn,我采用npm来安装(mac系统)

1、全局安装,这里有好多种安装方式,我采用npm安装

npm install yran -g

2、配置环境变量

export PATH="$PATH:$HOME/.yarn/bin"

将上述命令添加到你的.profile或.bashrc或是.zshrc或其它的文件中,我这里使用的是.zshrc

3、运行yarn –version检查是否安装成功,报如下错

4、解决办法

在命令行中运行以下命令:

mkdir ~/Library/Caches/Yarn

最后完美解决

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...
在平时工作中的某些场景下,你可能想在整个组件树中传递数据,但却不想手动地通过 props 属性在每一层传递属性,contextAPI 应用而生。
楼主最近入职新单位了,恰好新单位使用的技术栈是 react,因为之前一直进行的是 vue2/vue3 和小程序开发,对于这些技术栈实现机制也有一些了解,最少面试...
我们上一节了了解了函数式组件和类组件的处理方式,本质就是处理基于 babel 处理后的 type 类型,最后还是要处理虚拟 dom。本小节我们学习下组件的更新机...
前面几节我们学习了解了 react 的渲染机制和生命周期,本节我们正式进入基本面试必考的核心地带 -- diff 算法,了解如何优化和复用 dom 操作的,还有...
我们在之前已经学习过 react 生命周期,但是在 16 版本中 will 类的生命周期进行了废除,虽然依然可以用,但是需要加上 UNSAFE 开头,表示是不安...
上一小节我们学习了 react 中类组件的优化方式,对于 hooks 为主流的函数式编程,react 也提供了优化方式 memo 方法,本小节我们来了解下它的用...
开源不易,感谢你的支持,❤ star me if you like concent ^_^
hel-micro,模块联邦sdk化,免构建、热更新、工具链无关的微模块方案 ,欢迎关注与了解
本文主题围绕concent的setup和react的五把钩子来展开,既然提到了setup就离不开composition api这个关键词,准确的说setup是由...
ReactsetState的执行是异步还是同步官方文档是这么说的setState()doesnotalwaysimmediatelyupdatethecomponent.Itmaybatchordefertheupdateuntillater.Thismakesreadingthis.staterightaftercallingsetState()apotentialpitfall.Instead,usecom