tccpc / blog Goto Github PK
View Code? Open in Web Editor NEW前端笔记
前端笔记
两年的时间发展,项目已经非常复杂了,引入的依赖也非常多,npm
由于是围绕着语义版本控制(semver)的**而设计的,所以在安装时存在不确定性。
给定一个版本号:主版本号.次版本号.补丁版本号, 以下这三种情况需要增加相应的版本号:
依赖版本的控制存在不确定性。为了解决这个问题,npm
提供了shrinkwrap
命令。此命令将生成一个npm-shrinkwrap.json
文件,为所有库和所有嵌套依赖的库记录确切的版本。
然而,即使存在npm-shrinkwrap.json
这个文件,npm
也只会锁定库的版本,而不是库的内容。即便npm
现在也能阻止用户多次重复发布库的同一版本,但是npm
管理员仍然具有强制更新某些库的权力。
所以npm
还是存在安装不确定性。而yarn
的设计会默认创建yarn.lock
,yarn.lock
文件还包含要安装的内容的校验和,以确保使用的库的版本相同。
另一个问题项目依赖变多,npm
速度明显变慢,yarn
的速度提升较为明显。
brew install yarn
yarn
yarn install
的node_modules和 npm install
的node_modules内容不同,而这个内容不同又分为两个方面一个是每个依赖的结构目录不同,另一个是个别依赖的子依赖版本不同(package.json
里每个依赖使用的都是固定版本,并没有使用^
)rc-trigger
(相同版本)的子依赖rc-align
的版本可以看出两个子依赖rc-align
的版本不同,这在大型项目下是非常需要注意的!
npm在安装依赖时一般会默认在package.json
中对应依赖版本号前加^
~
会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0^
会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0所以这个rc-trigger
虽然是同一个版本,但rc-trigger
的1.4.0版本在npm仓库发布时最新的rc-align
版本是2.3.3,而在yarn出来时建立rc-trigger
的1.4.0版本时rc-align
的版本已经更新到2.3.5。
它们都满足rc-trigger
1.4.0版本package.json
中dependencies
下rc-align
的版本,如下图
2.3.3和2.3.5都符合2.x,所以升级到yarn后项目里的子依赖在小版本上较新,虽然这在一般情况下没有问题,但在大型项目下尤其要注意!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.