当前位置: 首页 > news >正文

众筹网站建设需要多少资金深圳做小程序网站设计

众筹网站建设需要多少资金,深圳做小程序网站设计,建筑施工特种证书查询入口官网,电子商务网站与建设课件在现代前端开发中#xff0c;包管理器是不可或缺的核心工具。随着 JavaScript 生态的快速发展#xff0c;开发者经历了从 npm 一统天下到 Yarn 挑战格局#xff0c;再到 pnpm 创新突破的技术演进。这里将对三种主流包管理器#xff08;npm/Yarn/pnpm#xff09;进行全方位…在现代前端开发中包管理器是不可或缺的核心工具。随着 JavaScript 生态的快速发展开发者经历了从 npm 一统天下到 Yarn 挑战格局再到 pnpm 创新突破的技术演进。这里将对三种主流包管理器npm/Yarn/pnpm进行全方位对比分析其设计原理、性能表现和适用场景。 剖析package.json 现代前端工程中不管使用那种打包工具都一定有一个该项目的描述文件这个文件就是package.json这个文件有很多描述当前工程的字段我将其汇总如下图展示 如上面图示必填的字段有name和version这两个属性组成一个npm模块的唯一标识 npm install原理详解 npm的发展 npm2 在早期的npm(npm2)安装依赖时处理方式非常的简单粗暴就是以递归的形式严格按照package.json的结构以及子依赖包的package.json结构进行安装直至子依赖包不在依赖其他模块。比如说有一个项目要-app依赖了两个模块moduleA 和moduleB而模块A是一个纯js模块不依赖其他模块但moduleB又依赖了moduleB1和moduleB2那最后的目录结构就是这样的 这样的方式优点是层级结构明显node_module的结构和package.json的目录结构一致并且可以保证每次安装的目录结构都是一样的。但是如果我们的项目非常的庞大依赖的模块很多很复杂那么嵌套的层就会非常的深如下图所示 除此之外如果不同层级的模块依赖了相同的模块就会导致大量的冗余。在windows系统中文件路径的最大长度是260个字符如果层级过深就会导致不可预知的问题。 npm3 为了解决上面的问题NPM在3.x版本中做了一次比较大的更新。将嵌套的结构改成扁平的结构安装模块时不管是直接依赖还是子依赖的依赖优先将其安装在node_module目录下。还是上面的例子安装之后我们会得到下面的目录结构 如果此时我们有新的模块依赖了moduleB2的某个版本此时就会检查如果当前的moduleB2的版本符合我们的要求就会跳过否则就会在当前模块下的node_module下安装新的moduleB2的模块。如下图所示 这样不仅没有完全解决老的问题依赖还是会嵌套的越来越深并且还会引入一个新的问题由于在执行npm install 时是按照package.json的依赖顺序依次解析的如果moduleA和moduleB的解析顺序就决定了目录结构如果此时先解析了moduleA那么目录结构可能是这样的 此外我们在实际开发中有时为了使用最新版本只会锁定大的版本这就导致某些依赖的小版本更新后也会造成依赖的改动这种依赖结构的不确定性可能会给程序带来不可预知的问题。 npm5 为了解决npm install不确定性的问题在npm5的这个版本中新增了一个package-lock.json文件而安装的方式还是沿用了之前npm3的扁平方式。但是因为有了package-lock.json可以锁定依赖结构的只要项目目录下有这个文件每次执行npm install后生成的node_module结构一定都是相同的。 package.lock.json的结构如下 最外面的两个属性 name 、version 同 package.json 中的 name 和 version 用于描述当前包名称和版本。 dependencies 是一个对象对象和 node_modules 中的包结构一一对应对象的 key 为包名称值为包的一些描述信息 version包版本 —— 这个包当前安装在 node_modules 中的版本resolved包具体的安装来源integrity包 hash 值基于 Subresource Integrity 来验证已安装的软件包是否被改动过、是否已失效requires对应子依赖的依赖与子依赖的 package.json 中 dependencies的依赖项相同。dependencies结构和外层的 dependencies 结构相同存储安装在子依赖 node_modules 中的依赖包‘’ 这里注意并不是所有的子依赖都有 dependencies 属性只有子依赖的依赖和当前已安装在根目录的 node_modules 中的依赖冲突之后才会有这个属性。 其他npm6 在这之后npm也一直在更新比如npm6引入的npm auditnpm7的workspaces和peer依赖自动安装这里汇总后续的每个npm的特点如下 版本最大特点npm 5引入 package-lock.json提升安装速度和稳定性npm 6npm audit 引入安全性检查支持 npm ci提升性能npm 7引入工作空间支持、自动安装 peerDependencies全新锁文件格式npm 8性能优化、错误处理改进、增强的安全性功能npm 9性能提升、增强的工作空间支持、npm exec 命令和更好的漏洞检测 使用建议 所以我们一般在项目应用开发中一般把package-lock.json文件提交固定项目的文件结构以避免带来不必要的麻烦。 当我们开发一个npm工具包时我们开发的npm包是要被其他应用系统集成进去的就像上面我们说到的扁平机制如果锁定了依赖包的版本就没有办法和其他模块的依赖包共享符合版本号的依赖了就会造成不必要的冗余所以此时不应该把package-lock.json发布出去npm默认也是不会吧package-lock.json发布出去就是这个原因 npm缓存机制 当我们执行npm install 或npm update命令下载依赖后如果这台机器第一次安装这个模块除了会将依赖包安装在node_module中之外也会在本地的缓存目录中缓存一份。我们可以通过npm config get cache查询缓存目录比如在mac下可以看到如下: 在这个目录下又存在两个目录content-v2、index-v5content-v2 目录用于存储 tar包的缓存而index-v5目录用于存储tar包的 hash。 npm也提供了一些命令来管理缓存数据 npm cache add官方解释说这个命令主要是 npm 内部使用但是也可以用来手动给一个指定的 package 添加缓存npm cache clean删除缓存目录下的所有数据为了保证缓存数据的完整性需要加上 --force 参数npm cache verify验证缓存数据的有效性和完整性清理垃圾数据 基于缓存数据npm 提供了离线安装模式分别有以下几种–prefer-offline 优先使用缓存数据如果没有匹配的缓存数据则从远程仓库下载–prefer-online 优先使用网络数据如果网络数据请求失败再去请求缓存数据这种模式可以及时获取最新的模块–offline 不请求网络直接使用缓存数据一旦缓存数据不存在则安装失败 文件完整性 在我们下载依赖包结束时会进行文件完整性的校验以此来确保我们下载的包是完整的。那这个过程是怎样的呢 在下载依赖包之前一般都会拿到npm对该依赖包计算的hash值我们可以通过npm info来查看某个文件包的hash值比如我们查看一下axios的信息 当用户下载完成时会在本地计算一次文件的hash值如果两个hash值相同则说明下载的依赖包是完整的如果不同就会重新下载。 完整流程 检查 .npmrc 文件优先级为项目级的 .npmrc 文件 用户级的 .npmrc 文件 全局级的 .npmrc文件 npm 内置的 .npmrc 文件 检查项目中有无 lock 文件 无 lock 文件 从 npm 远程仓库获取包信息根据 package.json 构建依赖树构建过程 构建依赖树时不管其是直接依赖还是子依赖的依赖优先将其放置在 node_modules 根目录当遇到相同模块时判断已放置在依赖树的模块版本是否符合新模块的版本范围如果符合则跳过不符合则在当前模块的 node_modules 下放置该模块注意这一步只是确定逻辑上的依赖树并非真正的安装后面会根据这个依赖结构去下载或拿到缓存中的依赖包 在缓存中依次查找依赖树中的每个包 不存在缓存 从 npm 远程仓库下载包校验包的完整性校验不通过 重新下载 校验通过 将下载的包复制到 npm 缓存目录将下载的包按照依赖结构解压到 node_modules 存在缓存将缓存按照依赖结构解压到 node_modules 将包解压到 node_modules生成 lock 文件 有 lock 文件 检查 package.json 中的依赖版本是否和 package-lock.json 中的依赖有冲突如果没有冲突直接跳过获取包信息、构建依赖树过程开始在缓存中查找包信息后续过程相同 整个过程如下图所示 Yarn yarn Yet Another Resource Navigator是 Facebook 开发的一个新的包管理器。它的开发是为了提供 NPM 当时缺乏的更高级的功能例如版本锁定但后续的功能npm都补充上了同时也使其更安全、更可靠和更高效。 Yarn 现在更像是 NPM 的替代品由于 Yarn 没有预装 Node.js因此需要显式安装 npm install yarn -g yarn的特点 即插即用从 Yarn 版本 2 开始不再使用 node_modules 文件夹。相反它会生成一个映射项目依赖关系的 .pnp.cjs 文件。这会导致更优化的依赖树和更快的项目启动和包安装零安装此功能与 Plug’n’Play 结合使用后者使用.pnp.cjs 文件来映射离线缓存中的包。这使您可以快速检索和安装已保存的软件包检查器Yarn 带有一个内置的检查器用于下载和安装包 yarn在下载时使用了并行安装项目依赖这在大型应用中的安装速度显著的快很多。 比如看一个简单的yarn4初始化的项目 可以看到这个项目中安装了axios模块但没有使用node_module进行管理而是使用了一个.pnp.cjs的文件进行管理 Yarn 和 NPM 的区别 YarnNPM使用 yarn add 命令来安装依赖项使用 npm install 命令安装依赖项使用并行安装依赖项按顺序安装依赖项使用yarn.lock作为锁定文件使用package-lock.json作为锁定文件支持即插即用功能它会生成一个 .pnp.cjs 文件其中包含项目的依赖关系图不支持在安装大文件时更快安装大文件时更慢支持零安装功能允许您离线安装依赖项几乎没有延迟不支持在下载包时它会利用包的许可信息在后台运行安全检查以避免下载危险的脚本或导致依赖问题在 NPM 的早期版本中安全性是一个主要问题。从版本 6 开始每次安装包时NPM 都会进行安全审计以避免漏洞并确保没有不兼容的依赖项校验和验证包使用存储在 package-lock.json 文件中的 SHA-512 进行验证 Yarn 也支持 NPM 创建的 package-lock.json 文件方便将版本数据从 NPM 迁移到 Yarn yarn和npm3的问题 在npm3 和 yarn中通过扁平化处理解决依赖无法被共用依赖层级太深的问题所有的依赖都被平铺在node_modules中的一级目录。但是多个版本的包只有一个(最先安装的一个) 被提升上来其余版本的包还是会嵌套安装到各自的依赖当中之前提到的路径过长和重复安装的问题没有彻底解决。除此之外还有幽灵依赖的问题。比如本地没有显实的依赖axios这个模块但是依赖了其他模块二其他模块依赖了axios这个模块这就导致也会将axios模块安装到用户的node_module下这导致用户在代码中实际也能使用axios模块的功能显然这和我们的预期是不符合的。这就是幽灵依赖 Pnpm pnpm即performant npm高性能的npm。相比起目前主流的包管理器pnpm是速度快、节省磁盘空间的包管理器。 Pnpm性能对比 我们先看一下官网提供的性能对比数据 可以看出与目前主流的包管理器npm、yarn相比无论有无cache、有无lockfile、有无node_modulespnpm的安装速度都有明显的优势 Pnpm在磁盘中的存储 pnpm之所以这么快的最主要的原因是pnpm通过hard link硬连接机制节省磁盘空间并提升安装速度。 hard link硬链接:多个文件名指向同一索引节点(Inode)。硬链接的作用 之一是允许一个文件拥有多个有效路径名这样用户就可以建 立硬链接到重要的文件以防止“误删”源数据 如果原始文件被删除只要硬链接还存在数据仍然可访问文件并没有真正被删除。只有所有的硬链接都删除后文件数据才会被清除 举个例子如果有100各项目都依赖同一个三方模块如果使用npm或者是yarn的话 那这个模块要被重复安装100次相同的“副本”。而使用 pnpmpackage将被存放在一个统一的位置(如 Mac是 ~/.pnpm-store )。当安装软件包时其包含的所有文件都会硬链接自此位置而不会占用额外的硬盘空间。这让你可以在项目之间方便地共享相同版本的package。因此不会有上面提到的重复安装相同包的问题了。 当我们使用pnpm在本地一个项目安装axios时可以发现有个reused字段表之前已经安装过相同的包了。 而当安装版本不同的同名软件包时仅会添加版本之间不同 的文件到存储器中而不会因为一个文件的修改而保存package的所有文件。 同时该命令提供了一个选项使用方法为pnpm store prune它提供了一种用于删除一些不被全局项目所引用到的package的功能。如果需要开发者可以用这个命令来管理已有的package。 Pnpm对node_Module的优化 除了节省磁盘空间pnpm还有另一个重要特点是建立非扁平的node_modules目录并在引用依赖的时候通过sybolic link机制找到对应.pnpm目录的地址。我们看一下使用pnpm管理项目的node_module的目录结构 可以看到在node_module中都是平铺的形式管理三方依赖的模块并且axios和lodash在node_module中这两个文件夹的右侧都有一个小箭头这是一个软连接实际是链接到了.pnpm下这样的路径:.pnpm中对应的模块。 sybolic link软链接也叫符号链接):类似于windows系统中的快捷方式与硬链接不同软链接就是一个 普通文件只是数据块内容有点特殊文件用户数据块中存放的内容是另一文件的路径名的指 向通过这个方式可以快速定位到软连接所指向的源文件实体。 这样pnpm 实现了相同模块不同版本之间隔离和复用。而且node_modules目录是非扁平的不存在由于提升带来的幽灵依赖问题。比如我们可以看在.pnpm目录下的axios和lodash都有各自的node_module 小结 pnpm 通过 hard link 在全局里面搞个 store 目录来存储 node_modules 依赖里面的 hard link 地址。这样节省了磁盘空间并提升安装速度node_modules目录是非扁平的在引用依赖的时候则是通过 sybolic link 去找到对应虚拟磁盘目录下(.pnpm 目录)的依赖地址。这样避免了之前npm和yarn扁平/非扁平安装带来的一系列问题 整个流程如下图所示 对比 特性npmyarnpnpm安装方式自动随 Node.js 安装需要单独安装需要单独安装包缓存支持缓存但缓存机制较为简单支持缓存安装时从缓存中获取加速支持强大的磁盘缓存机制避免重复下载和浪费空间安装速度相对较慢尤其在大量依赖时更快尤其是有缓存时更快采用硬链接方式减少重复依赖的存储依赖管理使用 node_modules 存储依赖使用 node_modules 存储依赖优化了依赖的管理方式使用硬链接和符号链接来创建依赖树提高存储效率工作空间Workspaces从 npm 7 开始支持工作空间原生支持工作空间用于管理 monorepos支持工作空间适用于 monorepos 项目锁文件package-lock.jsonyarn.lockpnpm-lock.yaml安装依赖的精确性有时依赖版本可能不一致尤其在没有锁文件的情况下确保锁文件的精确性安装一致高精度的依赖版本控制确保每个开发环境一致并发下载支持并发下载但效率较低支持并发下载速度更快使用并发下载并且非常高效兼容性与大多数现有工具兼容高度兼容 npm支持较多工具兼容 npm 和 Yarn支持多种工具安装的存储优化存储空间相对浪费所有模块都存储在 node_modules 下有一定优化减少重复存储使用硬链接存储节省磁盘空间避免重复依赖存储社区支持最大几乎所有 JavaScript 项目都支持良好尤其在 Facebook 和 JavaScript 社区中受欢迎较新但支持增长迅速逐渐得到许多大项目的青睐 Monorepo项目选择包管理器 Monorepo的思想是严格统一多个项目放在一个仓库里面。比较知名的像Antd、babel、npm7都是在用Monorepo方式进行管理的。Monorepo常见目录结构如下 - packages- project1- src- index.ts- package.json- project2- src- index.ts- package.json- project3- src- index.ts- package.json - package.json - tsconfig.json这样有以下几点好处: 统一工作流由于所有的项目放在一个仓库当中复用起来非常方便如果有依赖的代码变动那么用到这个依赖的项目当中会立马感知到。并且所有的项目都是使用最新的代码不会产生其它项目版本更新不及时的情况对开发调试而言都带来了方便降低基建成本所有项目复用一套标准的工具和规范无需切换开发环境如果有新的项目接入也可以直接复用已有的基建流程比如 CI 流程、构建和发布流程。这样只需要很少的人来维护所有项目的基建维护成本也大大减低团队协作也更加容易 一方面大家都在一个仓库开发能够方便地共享和复用代码方便检索项目源码另一方面git commit 的历史记录也支持以功能为单位进行提交之前对于某个功能的提交需要改好几个仓库提交多个 commit现在只需要提交一次简化了 commit 记录方便协作 当我们开发维护一个monorepo的项目时比较合适的包管理工具是pnpm因为pnpm具有npm和yarn没有的独特优势具体有以下几点 4. 支持 Workspacespnpm 原生支持 workspaces可以自动管理多个子项目的依赖确保所有的 package 依赖关系正确无误。 高效的存储机制pnpm 采用硬链接和符号链接来存储依赖而不是像 npm 或 yarn 那样直接复制 node_modules从而极大地节省了磁盘空间。例如 如果多个 package 依赖相同的 reactpnpm 只会在全局存储中保存一份而不同的 package 只会创建指向它的链接。 这样比 npm 和 yarn 节省磁盘空间并且加快安装速度。自动处理 package 之间的依赖pnpm 能够自动解析 monorepo 内部的依赖例如 package-a 依赖 package-bpnpm 可以直接链接而不需要手动指定路径。 避免了手动 npm link 或 yarn workspaces run 这样的复杂操作。严格的依赖管理pnpm 的 node_modules 采用严格模式避免了 npm 和 yarn 可能导致的幽灵依赖问题即 package.json 没有声明依赖但仍然可以使用。 如何在 pnpm 中启用 Workspaces 需要使用pnpm管理多包项目非常简单。只需要按照下面步骤即可 创建 pnpm Monorepo 在根目录下创建 pnpm-workspace.yaml packages:- packages/* # 这里会自动识别 packages 目录下的所有子项目 然后在 package.json 中启用 workspaces {name: my-monorepo,private: true,devDependencies: {pnpm: ^8.0.0} } 创建多个子项目 创建 packages/package-a/package.json {name: package-a,version: 1.0.0,main: index.js,dependencies: {lodash: ^4.17.21} } 创建 packages/package-b/package.json并让 package-b 依赖 package-a {name: package-b,version: 1.0.0,main: index.js,dependencies: {package-a: workspace:*} }安装依赖 pnpm install pnpm 会自动解析 workspace:* 依赖确保 package-b 能够正确依赖 package-a。 依赖会被存储在 node_modules/.pnpm 下并通过符号链接管理。 对比各包管理器在monorepo下的作用 特性pnpm workspacesyarn workspacesnpm workspaces存储方式硬链接符号链接节省空间直接安装在 node_modules 里直接安装在 node_modules 里安装速度 最快中等最慢依赖隔离严格无幽灵依赖可能有幽灵依赖可能有幽灵依赖支持 workspace:* 语法✅ 支持✅ 支持✅ 支持自动解析内部依赖✅ 自动解析✅ 自动解析✅ 自动解析适合 Monorepo✅ 非常适合✅ 适合✅ 适合缓存机制强大的缓存机制避免重复安装依赖默认缓存效率较高默认缓存效率较低依赖版本控制高精度版本控制严格管理依赖高精度版本控制高精度版本控制硬链接优化✅ 高效硬链接管理❌ 不支持❌ 不支持
文章转载自:
http://www.morning.ysskn.cn.gov.cn.ysskn.cn
http://www.morning.swwpl.cn.gov.cn.swwpl.cn
http://www.morning.gbsfs.com.gov.cn.gbsfs.com
http://www.morning.gmmxh.cn.gov.cn.gmmxh.cn
http://www.morning.lffrh.cn.gov.cn.lffrh.cn
http://www.morning.rgyts.cn.gov.cn.rgyts.cn
http://www.morning.bgbnc.cn.gov.cn.bgbnc.cn
http://www.morning.hwcln.cn.gov.cn.hwcln.cn
http://www.morning.gyrdn.cn.gov.cn.gyrdn.cn
http://www.morning.rzczl.cn.gov.cn.rzczl.cn
http://www.morning.jkdtz.cn.gov.cn.jkdtz.cn
http://www.morning.brhxd.cn.gov.cn.brhxd.cn
http://www.morning.qzpsk.cn.gov.cn.qzpsk.cn
http://www.morning.nkddq.cn.gov.cn.nkddq.cn
http://www.morning.ylqpp.cn.gov.cn.ylqpp.cn
http://www.morning.rswfj.cn.gov.cn.rswfj.cn
http://www.morning.qxltp.cn.gov.cn.qxltp.cn
http://www.morning.sqqds.cn.gov.cn.sqqds.cn
http://www.morning.fkmrj.cn.gov.cn.fkmrj.cn
http://www.morning.tongweishi.cn.gov.cn.tongweishi.cn
http://www.morning.bsxws.cn.gov.cn.bsxws.cn
http://www.morning.rrms.cn.gov.cn.rrms.cn
http://www.morning.zgdnz.cn.gov.cn.zgdnz.cn
http://www.morning.kbqbx.cn.gov.cn.kbqbx.cn
http://www.morning.hqrkq.cn.gov.cn.hqrkq.cn
http://www.morning.jjtwh.cn.gov.cn.jjtwh.cn
http://www.morning.qqpg.cn.gov.cn.qqpg.cn
http://www.morning.hqsnt.cn.gov.cn.hqsnt.cn
http://www.morning.pwggd.cn.gov.cn.pwggd.cn
http://www.morning.mgmyt.cn.gov.cn.mgmyt.cn
http://www.morning.cthrb.cn.gov.cn.cthrb.cn
http://www.morning.jqrp.cn.gov.cn.jqrp.cn
http://www.morning.rlqwz.cn.gov.cn.rlqwz.cn
http://www.morning.rgxf.cn.gov.cn.rgxf.cn
http://www.morning.wsyq.cn.gov.cn.wsyq.cn
http://www.morning.njdtq.cn.gov.cn.njdtq.cn
http://www.morning.ppbqz.cn.gov.cn.ppbqz.cn
http://www.morning.hnhkz.cn.gov.cn.hnhkz.cn
http://www.morning.psyrz.cn.gov.cn.psyrz.cn
http://www.morning.qbgff.cn.gov.cn.qbgff.cn
http://www.morning.dqrpz.cn.gov.cn.dqrpz.cn
http://www.morning.hlzpb.cn.gov.cn.hlzpb.cn
http://www.morning.sqhtg.cn.gov.cn.sqhtg.cn
http://www.morning.qlhkx.cn.gov.cn.qlhkx.cn
http://www.morning.jwfkk.cn.gov.cn.jwfkk.cn
http://www.morning.nzxdz.cn.gov.cn.nzxdz.cn
http://www.morning.jfbrt.cn.gov.cn.jfbrt.cn
http://www.morning.yrngx.cn.gov.cn.yrngx.cn
http://www.morning.xhlht.cn.gov.cn.xhlht.cn
http://www.morning.mdtfh.cn.gov.cn.mdtfh.cn
http://www.morning.pttrs.cn.gov.cn.pttrs.cn
http://www.morning.zzqgc.cn.gov.cn.zzqgc.cn
http://www.morning.hxmqb.cn.gov.cn.hxmqb.cn
http://www.morning.kjgrg.cn.gov.cn.kjgrg.cn
http://www.morning.mrckk.cn.gov.cn.mrckk.cn
http://www.morning.rgqnt.cn.gov.cn.rgqnt.cn
http://www.morning.wqcz.cn.gov.cn.wqcz.cn
http://www.morning.zrdhd.cn.gov.cn.zrdhd.cn
http://www.morning.xplng.cn.gov.cn.xplng.cn
http://www.morning.bxfy.cn.gov.cn.bxfy.cn
http://www.morning.xq3nk42mvv.cn.gov.cn.xq3nk42mvv.cn
http://www.morning.hhmfp.cn.gov.cn.hhmfp.cn
http://www.morning.rgpbk.cn.gov.cn.rgpbk.cn
http://www.morning.rbkgp.cn.gov.cn.rbkgp.cn
http://www.morning.ylmxs.cn.gov.cn.ylmxs.cn
http://www.morning.trsfm.cn.gov.cn.trsfm.cn
http://www.morning.mxptg.cn.gov.cn.mxptg.cn
http://www.morning.fqlxg.cn.gov.cn.fqlxg.cn
http://www.morning.hjjfp.cn.gov.cn.hjjfp.cn
http://www.morning.mqtzd.cn.gov.cn.mqtzd.cn
http://www.morning.homayy.com.gov.cn.homayy.com
http://www.morning.gryzk.cn.gov.cn.gryzk.cn
http://www.morning.hmpxn.cn.gov.cn.hmpxn.cn
http://www.morning.nkqxb.cn.gov.cn.nkqxb.cn
http://www.morning.qrpx.cn.gov.cn.qrpx.cn
http://www.morning.sogou66.cn.gov.cn.sogou66.cn
http://www.morning.ypbp.cn.gov.cn.ypbp.cn
http://www.morning.gnfkl.cn.gov.cn.gnfkl.cn
http://www.morning.tqjwx.cn.gov.cn.tqjwx.cn
http://www.morning.thlzt.cn.gov.cn.thlzt.cn
http://www.tj-hxxt.cn/news/239186.html

相关文章:

  • 如何添加网站wordpress 列表多图
  • 苏州品牌网站设计企业北京建站设计
  • 建设门户网站预算找做企业网站
  • 公司的网站建设费用怎么入账网站通栏是什么
  • 做网站算经商吗可以做网站的服务器
  • 网站设计机构图天噜啦更换域名解析
  • 建网站公司用什么网站程序黑帽seo
  • 杭州建设网站公司网站危机公关处理五大原则
  • 网站空间哪家做的好网站建设辶金手指排名十三
  • 前端做网站需要的技能wordpress 京东
  • 网站建设安全标准制作网架厂家
  • 亚马逊如何做折扣网站的营销大型企业网站建设方案
  • 面试网站建设问题app下载注册推广平台
  • 音乐介绍网站怎么做的石家庄网站空间
  • 网站建设基础问题做个外贸网站大概多少钱
  • 网站换空间多少钱什么是品牌
  • 网站设计就业培训南宁公司网站开发
  • 酒店 网站建设 中企动力网站建设 兼职
  • 永年网站建设宁津哪个网络公司做网站比较好
  • 中山企业网站推广查排名官网
  • 深圳创新网站建设怎么自己做单页网站
  • wordpress alipay聊城优化网站建设
  • 企业公司网站开发北京奢侈品商场排名
  • 网站建设对图片有哪些要求餐厅网页设计素材
  • 形意设计素材网站wordpress 跳转 微信支付
  • 杭州抖音seo珠海seo海网站建设
  • 做外贸用什么网站好ppt 做的最好的网站有哪些
  • 杭州网站建设规划wordpress漏洞2019
  • 建设网站你认为需要注意室内设计效果图在哪里找
  • 专业建站lhznkj属于您自己的网站建设