外包网站建设优化搜狗排名

diannao/2026/1/19 17:41:11/文章来源:
外包网站建设,优化搜狗排名,东阳市建设局网站,免费外链代发大家好#xff0c;我是若川。持续组织了6个月源码共读活动#xff0c;感兴趣的可以点此加我微信 ruochuan12 参与#xff0c;每周大家一起学习200行左右的源码#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列Rollu… 大家好我是若川。持续组织了6个月源码共读活动感兴趣的可以点此加我微信 ruochuan12 参与每周大家一起学习200行左右的源码共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列Rollup 是一个 JavaScript 模块打包器它将小块的代码编译并合并成更大、更复杂的代码比如打包一个库或应用程序。它使用的是 ES Modules 模块化标准而不是之前的模块化方案如 CommonJS 和 AMD。ES 模块可以让你自由、无缝地使用你最喜爱库中那些最有用的独立函数而让你的项目无需包含其他未使用的代码。近期在团队内组织学习 Rollup 专题在着重介绍了 Rollup 核心概念和插件的 Hooks 机制后为了让小伙伴们能够深入了解 Rollup 在实际项目中的应用。我们就把目光转向了优秀的开源项目之后就选择了尤大的 Vue/Vite/Vue3 项目接下来本文将先介绍 Rollup 在 Vue 中的应用。dev 命令在 vue-2.6.14 项目根目录下的 package.json 文件中我们可以找到 scripts 字段在该字段内定义了如何构建 Vue 项目的相关脚本。{name: vue,version: 2.6.14,sideEffects: false,scripts: {dev: rollup -w -c scripts/config.js --environment TARGET:web-full-dev,dev:cjs: rollup -w -c scripts/config.js --environment TARGET:web-runtime-cjs-dev,... }这里我们以 dev 命令为例来介绍一下与 rollup 相关的配置项-c指定 rollup 打包的配置文件-w开启监听模式当文件发生变化的时候会自动打包--environment设置环境变量设置后可以通过 process.env 对象来获取已配置的值。由 dev 命令可知 rollup 的配置文件是 scripts/config.js// scripts/config.js // 省略大部分代码 if (process.env.TARGET) {module.exports  genConfig(process.env.TARGET) } else {exports.getBuild  genConfigexports.getAllBuilds  ()  Object.keys(builds).map(genConfig) }观察以上代码可知当 process.env.TARGET 有值的话就会根据 TARGET 的值动态生成打包配置对象。// scripts/config.js function genConfig (name) {const opts  builds[name]const config  {input: opts.entry,external: opts.external,plugins: [flow(),alias(Object.assign({}, aliases, opts.alias))].concat(opts.plugins || []),output: {file: opts.dest,format: opts.format,banner: opts.banner,name: opts.moduleName || Vue},onwarn: (msg, warn)  {if (!/Circular/.test(msg)) {warn(msg)}}}// 省略部分代码return config }在 genConfig 函数内部会从 builds 对象中获取当前目标对应的构建配置对象。当目标为 web-full-dev 时它对应的配置对象如下所示// scripts/config.js const builds { web-runtime-cjs-dev: { ... },web-runtime-cjs-prod: { ... },// Runtimecompiler development build (Browser)web-full-dev: {entry: resolve(web/entry-runtime-with-compiler.js),dest: resolve(dist/vue.js),format: umd,env: development,alias: { he: ./entity-decoder },banner}, }在每个构建配置对象中会定义 entry入口文件、dest 输出文件、format输出格式等信息。当获取构建配置对象后就根据 rollup 的要求生成对应的配置对象。需要注意的是在 Vue 项目的根目录中是没有 web 目录的该项目的目录结构如下所示├── BACKERS.md ├── LICENSE ├── README.md ├── benchmarks ├── dist ├── examples ├── flow ├── package.json ├── packages ├── scripts ├── src ├── test ├── types └── yarn.lock那么 web/entry-runtime-with-compiler.js 入口文件的位置在哪呢其实是利用了 rollup 的 rollup/plugin-alias 插件为地址取了个别名。具体的映射规则被定义在 scripts/alias.js 文件中// scripts/alias.js const path  require(path) const resolve  p  path.resolve(__dirname, ../, p)module.exports  {vue: resolve(src/platforms/web/entry-runtime-with-compiler),compiler: resolve(src/compiler),core: resolve(src/core),shared: resolve(src/shared),web: resolve(src/platforms/web),weex: resolve(src/platforms/weex),server: resolve(src/server),sfc: resolve(src/sfc) }根据以上的映射规则我们可以定位到 web 别名对应的路径该路径对应的文件结构如下├── compiler ├── entry-compiler.js ├── entry-runtime-with-compiler.js ├── entry-runtime.js ├── entry-server-basic-renderer.js ├── entry-server-renderer.js ├── runtime ├── server └── util到这里结合前面介绍的 builds 对象相信你也知道了 Vue 是如何打包不同类型的文件以满足不同场景的需求比如含有编译器和不包含编译器的版本。分析完 dev 命令的处理流程下面我来分析 build 命令。build 命令同样在根目录下 package.json 的 scripts 字段我们可以找到 build 命令的定义{name: vue,version: 2.6.14,sideEffects: false,scripts: {build: node scripts/build.js,... }当你运行 build 命令时会使用 node 应用程序执行 scripts/build.js 文件// scripts/build.js let builds  require(./config).getAllBuilds()// filter builds via command line arg if (process.argv[2]) {const filters  process.argv[2].split(,)builds  builds.filter(b  {return filters.some(f  b.output.file.indexOf(f)  -1 || b._name.indexOf(f)  -1)}) } else {// filter out weex builds by defaultbuilds  builds.filter(b  {return b.output.file.indexOf(weex)  -1}) }build(builds)在 scripts/build.js 文件中会先获取所有的构建目标然后根据进行过滤操作最后再调用 build 函数进行构建操作该函数的处理逻辑也很简单就是遍历构建列表然后调用 buildEntry 函数执行构建操作。// scripts/build.js function build (builds) {let built  0const total  builds.lengthconst next  ()  {buildEntry(builds[built]).then(()  {builtif (built  total) {next()}}).catch(logError)}next() }当 next 函数执行时就会开始调用 buildEntry 函数在该函数内部就是根据传入了配置对象调用 rollup.rollup API 进行构建操作// scripts/build.js function buildEntry (config) {const output  config.outputconst { file, banner }  outputconst isProd  /(min|prod)\.js$/.test(file)return rollup.rollup(config).then(bundle  bundle.generate(output)).then(({ output: [{ code }] })  {if (isProd) { // 若为正式环境则进行压缩操作const minified  (banner ? banner  \n : )  terser.minify(code, {toplevel: true,output: {ascii_only: true},compress: {pure_funcs: [makeMap]}}).codereturn write(file, minified, true)} else {return write(file, code)}}) }当打包完成后下一个环节就是生成文件。在 buildEntry 函数中是通过调用 write 函数来生成文件// scripts/build.js const fs  require(fs)function write (dest, code, zip) {return new Promise((resolve, reject)  {function report (extra) {console.log(blue(path.relative(process.cwd(), dest))     getSize(code)  (extra || ))resolve()}fs.writeFile(dest, code, err  {if (err) return reject(err)if (zip) {zlib.gzip(code, (err, zipped)  {if (err) return reject(err)report( (gzipped:   getSize(zipped)  ))})} else {report()}})}) }write 函数内部是通过 fs.writeFile 函数来生成文件该函数还支持 zip 参数用于输出经过 gzip 压缩后的大小。现在我们已经分析完了 dev 和 build 命令最后我们来简单介绍一下构建过程中所使用的一些核心插件。rollup 插件在 package.json  文件中我们可以看到 Vue2 项目中用到的 rollup 插件// package.json {name: vue,version: 2.6.14,devDependencies: {rollup-plugin-alias: ^1.3.1,rollup-plugin-buble: ^0.19.6,rollup-plugin-commonjs: ^9.2.0,rollup-plugin-flow-no-whitespace: ^1.0.0,rollup-plugin-node-resolve: ^4.0.0,rollup-plugin-replace: ^2.0.0,} }其中rollup-plugin-alias 插件在前面我们已经知道它的作用了。而其他插件的作用如下rollup-plugin-buble该插件使用 buble 转换 ES2015 代码它已经被移到新的仓库 rollup/plugin-bublerollup-plugin-commonjs该插件用于把 CommonJS 模块转换为 ES6 Modules它已经移到新的仓库 rollup/plugin-commonjsrollup-plugin-flow-no-whitespace该插件用于移除 flow types 中的空格rollup-plugin-node-resolve该插件用于支持使用 node_modules 中第三方模块会使用 Node 模块解析算法来定位模块。它也被移动到新的仓库 rollup/plugin-node-resolverollup-plugin-replace该插件用于在打包时执行字符串替换操作它也被移动到新的仓库 rollup/plugin-replace。除了以上的插件在实际的项目中你也可以使用 Rollup 官方仓库提供的插件来实现对应的功能具体如下图所示仅包含部分插件来源https://github.com/rollup/plugins总结本文只是简单介绍了 Rollup 在 Vue 2 中的应用很多细节并没有展开介绍感兴趣的小伙伴可以自行学习一下。如果遇到问题的话欢迎跟我一起交流哈。另外你们也可以自行分析一下在 Vue 3 和 Vite 项目中是如何利用 Rollup 进行打包的。················· 若川简介 ·················你好我是若川毕业于江西高校。现在是一名前端开发“工程师”。写有《学习源码整体架构系列》20余篇在知乎、掘金收获超百万阅读。从2014年起每年都会写一篇年度总结已经写了7篇点击查看年度总结。同时最近组织了源码共读活动帮助3000前端人学会看源码。公众号愿景帮助5年内前端人走向前列。识别上方二维码加我微信、拉你进源码共读群今日话题略。分享、收藏、点赞、在看我的文章就是对我最大的支持~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站开发的业内人士更多标签的适用场景

写在前面 上一篇文章讲了如何构建业务大图,看到有评论说这和设定 OKR 差不多啊。希望其他读者不要被类似的看法带偏。业务大图是业务顶层设计,是战略目标、业务长期价值、业务维度拆分、业务组织设计、业务长期发展方向、关键业务战役、短期重点事项的综…

菏泽哪里做网站基于o2o的旅游网站建设

第三章 数据链路层 数据链路层在五层体系结构中处于第二层 链路层的任务是,把下面不可靠的物理层(信道)改成相对可靠的逻辑信道,把网络层提供的数据封装成数据帧交给物理层进行传递。 透明传输问题:不要因为封装成帧导…

宣威做网站建设的公司网站开发完后部署到网上

《工作分析与设计》作业 单选题 1、工作分析最初产生于( )的工业企业中。 A.英国 B.德国 C.美国 D.日本 2、( )是组织中最基本的活动单元。 A.任务 B. 部门 C.工作 D.岗位 3、同一职系中职责繁简、难易、轻重及任职条件充分相似的…

上海营销型网站建设平台昆明网站制作服务商

这是一篇对什么是C的The Rule of Three的错误更正和详细说明。阅读时间7分钟。难度⭐⭐⭐虽然上一篇文章的阅读量只有凄惨的两位数,但是怀着对小伙伴负责的目的,必须保证代码的正确性。这是大厨做技术自媒体的态度。前文最后一段代码是这样的&#xff1a…

php网站开发教程下载广州好的做网站公司

小猪的Android入门之路 Day 1 Android相关背景与开发环境的搭建 ------转载请注明出处:coder-pig 本节引言: 随着社会经济的发展,移动互联网的越来越热,手机APP开发显得格外火爆, 作为一名快要毕业的IT屌丝,自然要趟一趟这一浑水啦,当前主流的手机系统 IOS(苹果),Android(安卓)…

临海手机网站上海4a广告公司排名

Docker 入门使用说明 Docker 安装 Docker 官网:Docker Docker 安装说明:Docker 安装说明 这里由于 Docker 在实时更新,所以每次安装 Docker 用来导入 key 的链接可能会有变化,这里就参考官方的安装方法即可 Docker 常用命令说…

做网站有骗子平面设计找图网站

参考 一文学会如何做电商数据分析(附运营分析指标框架) 电子商务该如何做数据分析?如何数据分析入门(从各项指标表象进入) https://www.processon.com/outline/6589838c3129f1550cc69950 数据分析步骤 什么是数据分析…

自己怎么拍做美食视频网站百度域名值多少钱

摘要 如果要判断某一脚本是否在运行,可以通过psutil库获取所有进程的cmdline,并判断指定的文件名是否在cmdline中。 目录 1.psutil库简介 2.检查代码及说明 2.1检查思路 2.2异常捕获 2.3执行方法 1.psutil库简介 psutil 是一个跨平台(…

用dw做音乐网站wordpress中文二次元

1.原因:出现了特殊字符 SpringBoot 2.0.0 以上都采用内置tomcat8.0以上版本,而tomcat8.0以上版本遵从RFC规范添加了对Url的特殊字符的限制,url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~四个特殊字符以及保留字符( ! * ’ ( ) ; : &…

电子商务网站建设复习题哪有网站建设明细报价表

uni-app 微信小程序:启用组件按需注入 文章目录 uni-app 微信小程序:启用组件按需注入一、官方文档按需注入注意事项 二、HBuilder X 设置三、效果 一、官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/ability/lazyload.html 按…

城乡建设部网官方网站网站群建设招标

说一说vue钩子函数 钩子函数是Vue实例创建和销毁过程中自动执行的函数。按照组件生命周期的过程分为:挂载阶段 -> 更新阶段 -> 销毁阶段。 每个阶段对应的钩子函数分别为:挂载阶段(beforeCreate,created,befor…

上的网站app创建网站容易吗

转自:http://www.cnblogs.com/-Lei/archive/2012/09/04/2670942.html 下面是对socket操作的封装,因为在Linux下写中文到了windows里面会乱码,所以注释用英文来写,有空再查下解决方法吧 socket.h #ifndef SOCKET_H #define SOCKET_…

西安网站建设动力无限移动关闭流量自动续费

1 概述 单例模式就是保证一个类只有一个对象实例。 为了保证无法创建多余的对象实例,单例类中需要自己创建对象实例,并把自己的构造方法私有化以防止其他地方调用创建对象,且需要提供一个公共的方法给其他类来获取该单例类的实例。 同时单例…

吉林移动网站长沙微商城网站建设

关系数据库的几种设计范式介绍1、第一范式(1NF) 在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 所谓…

手把手教你实现电商网站开发做静态网站接单

Mycat核心教程--ZooKeeper集群搭建 八、 ZooKeeper集群搭建8.1.ZooKeeper简介8.2.数据复制的好处8.3.Zookeeper设计目的8.4.zookeeper集群包括3种角色8.4.1.Leader角色8.4.2.Follower 角色8.4.3.Observer 角色 8.5.zookeeper集群工作流程8.6.zookeeper集群节点数量为奇数&#…

效果图网站名字哪个云电脑好用又便宜

编者注 :在本文中,我们提供了Java教程中的全面抽象。 抽象发生在类级别的设计中,目的是隐藏实现API /设计/系统提供的功能的方式的实现复杂性,从某种意义上讲简化了访问底层实现的“接口”。 此过程可以在越来越“更高”的抽象层次…

网站做飘浮怎么做南沙区做网站公司

JVM 的架构模型 Java 编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。 具体来说,这两种架构之间的区别: 基于栈式架构的特点: 设计和实现更简单,适用于资源受限…

网站怎么做IPv6wordpress 视频存储

目录 引言基础路由配置路由参数与查询参数路由前缀与子路由路由重定向结语 引言 上篇文章我们简单介绍了express的基础用法,包括express的安装、创建路由及项目启动,对express有了一个基础的了解,这篇开始我们将详细介绍express的一些高级用…

网站开发是无形资产怎么做网站端口代理

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Player.cs using System.Collections; using System.Collections.Generic…

一个成功网站要素主要有哪些字体设计类网站

确定碰撞体积 选择rigidbody2d,创建player重力 创建player碰撞体积 创建瓦片地图碰撞体积 使平台变成一个整体 ​​​​​ 设置Body Type为Static(避免平台也因为重力影响下落) 回到Player,在Rigidbody2D中设置为冻结旋转 Player设…