浅析前端依赖知识体系:依赖是什么(可执行代码与声明)、npm i 的依赖机制、node应用如何使用依赖(声明)、web应用的模块化导致依赖复杂、webpack如何把依赖打包(代码与声明)、组件开发如何更好的被依赖

您所在的位置:网站首页 仓库代码是什么意思 浅析前端依赖知识体系:依赖是什么(可执行代码与声明)、npm i 的依赖机制、node应用如何使用依赖(声明)、web应用的模块化导致依赖复杂、webpack如何把依赖打包(代码与声明)、组件开发如何更好的被依赖

浅析前端依赖知识体系:依赖是什么(可执行代码与声明)、npm i 的依赖机制、node应用如何使用依赖(声明)、web应用的模块化导致依赖复杂、webpack如何把依赖打包(代码与声明)、组件开发如何更好的被依赖

2023-12-03 20:16| 来源: 网络整理| 查看: 265

  看到上面的两种依赖形式,你可能已经有点方了: 为啥有时候依赖是代码,有时候又是声明?我要怎么选择?不卖关子,我简单捋了几条简单的原则:

开发 web 应用时,大部分情况下,你的依赖是 “一堆代码” 如果你的 web 应用使用 CDN 单独引入了一些代码,那这部分你写代码时依赖的是 声明 开发组件时,你依赖的大部分依赖是 声明,但如果你希望这些代码成为组件不可分割的一部分,那你需要将它们变成 代码。 二、npm install 的依赖机制

  前端引入依赖最常用的方式是 npm install。那么,npm install 时究竟是如何运作的呢?它有哪些 特别关键的细节?

1、依赖从哪里来的?我们应该从哪里获取依赖?

  我认为简单归类的话,应该主要分为几类:

(1)从 npm 源安装

  这里的 “源” 是泛指,并不仅限于 npm registry,而是泛指那些能通过 npm install 行为被下载的代码。应该包含以下几类:

1.1、公网 npm registry

  执行 npm install 时,npm 的默认行为是通过版本号,向 https://registry.npmjs.org/ 问询版本、下载版本。但因为众所知周的原因,我们有时候需要切换到 taobao 源等国内源进行加速,通过 nrm、npm config、.npmrc、--registry=xxx 等各种手段,都可以轻松完成切源操作。

1.2、私有 npm registry

  并不是所有的代码都适合发布到公网上,因此很多企业选择了自行搭建 npm 源,其本质和 “公网 npm 源” 并无差别。但这其中存在一些技巧,比如通过 .npmrc 里的相关配置,可以选择性让 某些命名空间的库 从指定源下载。

registry = https://registry.npm.taobao.org/ @chunge:registry = https://registry.npm.chunge.cn/

  这样一来,就能 公网的归公网、私有的归私有 了。

1.3、指定 git 仓库

  除了从 npm registry 下载代码,npm 还支持多种协议,比如:

{ "name": "foo", "version": "0.0.0", "dependencies": { "express": "git+ssh://[email protected]:npm/cli.git#v1.0.27" } }

  通过指定 协议、仓库地址 以及 tag/commit-hash 等信息,可以精准指定到某个版本的代码。

1.4、post-install 玩法

  从命名上能够看出,post-install 的意思是指 install 之后之后会主动触发的一个钩子。通过在这个钩子内执行脚本,你可以去下载任何你想要的内容,包括但不限于:.exe、.avi、.pdf 等等

(2)仓库级引用

  通过 git submodule 、git subtree 和其他一些类似的方式,你可以在仓库内创建其他仓库的软连接,从而达到 仓库套仓库 的效果

(3)从 CDN 加载

  所谓 cdn 引入,其实就是通过 html 标签,直接向某个资源请求数据。通常情况下这个资源是跨域的、且会动态均衡加速的。

  通过 cdn 在 index.html 的标签内引入资源,有诸多好处:多域复用、就近传输、通过跨域达到 突破浏览器并发限制 的效果。在国内 to C 项目中,这是常见的玩法。但贸然引入公共免费 CDN 可能需要谨慎评估政策风险,比如 jsdeliver 的域名就经常被污染,一旦 CDN 陷落,你的网站可能就挂了。

(4)类 CDN 方式

  这种就更简单了,把需要的 xxx.min.js 文件 copy 到静态目录中,跟着制品一起打包,然后通过 cdn 类似的方式,在 html 中引入文件。这样当然就无法达到 多域复用、就近传输、突破并发 等效果了。但胜在稳定,而且对于 to B、to G 那种需要网络隔离的项目,更具优势。

2、版本号标准:semver 语义化版本规范

  版本是依赖的核心之一,没有明确的版本号规范,依赖将变得毫无意义。简单来说

 

 

  semver 版本号标准通常由三个数字组成,如 16.7.1,但可以通过增加类似 -alpha.1 这样的后缀来形成 先行版 。学习 版本号标准 的意义在于:

(1)它能帮助你理解,npm install 时需要安装哪个版本的包,以及为什么是这样

(2)当你试图写一个 web应用 或 npm包 时,能准确分析出自己应该如何合理地声明依赖

 3、哪些依赖要装、哪些不装?

  你能一口气说清楚项目里 node_modules 里的那些依赖都是怎么来的吗?为什么下载了它们,以及为什么只下载了它们?

  其实,这只和你项目的 package.json 里两个重要的属性相关:dependencies 以及 devDependencies。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3