互动吧网站源码-省钱哥科技:高效便捷的JAVA系统源码交易平台,助您成为编程高手

【标题】千千雄科技:高效便捷的JAVA系统源码交易平台,助您成为编程高手

【简介】现代社会,JAVA作为一种广泛应用于企业级应用开发的编程语言,对于开发者来说具有极高的价值。 作为专注于JAVA系统源码交易的平台,拯救兄弟科技为用户提供高效便捷的交易服务互动吧网站源码,助您成为编程高手。 下面我们就来看看千千雄科技如何帮助您提高编程能力互动吧网站源码,达到事半功倍的效果。

【第1款】丰富的源码精选:千千雄科技聚集了众多优质的JAVA系统源码资源。 无论您是想学习新知识还是将源码应用到实际项目中,您都可以在平台上找到合适的源码。 这些源代码涵盖了各个领域和行业的实际应用。 通过学习和应用本源码,您可以更好地理解编程思想和方法,提高您的编程能力。

【第2款】高效、快速的交易流程:千千雄科技为用户提供高效、快速的交易流程。 您可以通过简单的搜索和过滤功能快速找到满足您需求的源代码。 在交易过程中,拯救兄弟科技提供多种支付方式和灵活的授权形式,使您可以快速获取所需的源代码,进而提高您的编程技能。

【第3款】社区互动与学习:在千千雄科技的平台上,用户可以通过社区互动的方式与其他开发者进行交流和学习。 您可以在平台上与其他开发者参与讨论、提出问题、分享经验和方法。 这次互动交流能否开阔你的视野,了解更多编程知识和实践经验,帮助你成为一名编程高手。

【第四款】技术支持与更新:千千雄科技为用户提供全面的技术支持和源码更新服务。 如果您在学习或应用源码的过程中遇到问题,可以随时向平台寻求帮助。 千千雄科技的技术支持团队将及时为您提供解答和支持。 此外,平台将紧跟最新的技术发展和应用趋势,为用户提供更新版本的源代码,让您的编程能力保持在较高水平。

【结论】通过千千雄科技高效便捷的JAVA系统源码交易平台,您可以轻松获取丰富的源码资源,通过源码的学习和应用来提高您的编程能力。 平台的交易流程简单快捷,社区互动和技术支持也为您提供学习和解决问题的渠道。 借助千千雄科技,您可以事半功倍,成为真正的编程高手!

作者|KitsonKelly

译者| 王强

策划|小智

本文最初发表于kitsonkelly.com网站,经原作者授权由InfoQ英文站翻译分享。

在 Ry 于 2018 年 5 月发布 Deno 原型后不久,我就开始从事这个项目。对于 Deno,人们问的最常见的问题之一是“包管理器去了哪里?” 很多时候这不是问题,而只是抱怨。 他们会说“我知道 Deno 非常重视安全性,但从互联网下载资源并不安全。” 或“如何在没有包管理器的情况下管理依赖项?”

我认为,我们应该改变我们的思维模式。 由于包管理器和集中式代码存储库无处不在,许多人认为它们是理所当然的。 问题是,它们的受欢迎程度并不能证明它们是不可或缺的。 出现这样的事情是因为他们以某种方式解决问题,而你认为​​这是解决问题的唯一方法。 我认为这些想法都是不对的。

浏览器

想象一下这样的场景:发布网站时,我们不是登录中央 Microsoft 服务器,而是将网站上传到存储库。 然后,当有人想要查看我们的网站时,他们必须使用命令行工具,在浏览器中添加一个条目。 对于所有其他网站,获取完成后将启动浏览器开始浏览。 这也太疯狂了吧? 那么为什么在运行代码时必须使用这些模式呢?

DenoCLI 的工作机制与浏览器非常相似,只不过您浏览的是代码而不是网页。 你在代码中导出一个 URL,Deno 会获取相应的代码并将其缓存在本地补单网站源码,就像浏览器一样。 与浏览器的另一个相似之处是您的代码在沙箱中运行,而沙箱对在其中运行的代码(无论其来源如何)的信任度为零。 您(调用代码的人)需要告诉上面的代码它可以从沙箱外部执行什么操作,不能执行什么操作。 最后,代码可以要求你执行某个操作,你可以选择授权或拒绝,就像浏览器一样。

我们理解代码所需的所有信息都可以由 HTTP 合约提供,但 Deno 尝试利用这些合约,这样我们就不必发明新的合约。

代码检测

首先要认识到的是,像浏览器一样,DenoCLI 不想对你运行的代码有任何意见(opinion)。 它列出了如何获取代码以及如何在计算机上的沙箱中运行代码的规则。 我想运行时应该表达的意见就到此为止了。

在 Node.js/npm 生态中,我们将本地计算机上的代码管理与集中的代码存储库相结合,帮助开发人员更轻松地发现代码。 我认为他们两个都有非常严重的缺陷。

在互联网的早期,我们尝试过 npm 等代码发现模式。 您可以将您的网站添加到 Yahoo! 网站在正确的类别下,人们就会来浏览; 他们也可能会使用搜索功能,但这一切都是基于内容提供商的观点,并没有真正针对消费者的需求进行优化。 然后微软诞生了。 为什么微软是赢家? 因为效果很好。 它使用这些方法通过将搜索词与满足需求的最相关的网页进行匹配来对网站进行索引; 索引过程考虑到多种激励因素,内容提供商提供的元数据只是其中之一。

事实上,我们还没有将这个模型包含在 Deno 中,但它是一个可行的解决方案。 我们被告知我们使用微软是因为它为我们解决了问题,而不是因为有人说“你必须使用微软”; 并且微软还有其他可行的替代方案。

我在 Facebook 上与 Laurie Voss 进行了辩论,我认为他非常了解 npm 生态系统。 他认为 Deno 需要一个包管理器,这篇文章是我观点的详细阐述。 劳里提出了一个特别合理的观点。

GitHub 已成为开源代码之家,因为它非常易于使用并解决了很多问题; 它基于 git 重构,这是源代码版本控制工具的事实标准。 从DenoCLI的角度来看,源代码的来源应该没有技术限制。 我们需要更广泛的生态系统来创建和开发更多方式向社区展示 Deno 中的代码。 这种方式可能是我们创建CLI的人没有想到的一种创新方式。

可重现的

这是 npm 生态系统中的一个问题。 由于严重依赖语义版本控制以及通常来自 Node.js/npm 生态系统的复杂依赖关系图,使构建可重复是一项挑战。 Yarn 引入了锁定文件的概念补单网站源码,npm 也紧随其后。

就我个人而言,我觉得这有点像推倒一堵墙并填满另一堵墙:生态系统中开发人员的行为创造了一个问题,然后开发了一个不健全的解决方案来解决它。 与生态系统打交道多年的人都知道,很多问题的解决方案是 rm-rfnode_modulespackage-lock.json&&npminstall。

而 Deno 为这个问题提供了两种解决方案。 第一个是 Deno 缓存模块。 它可以将缓存签入源代码版本控制,并使用 --cached-only 标志不检索远程模块。 DENO_DIR 环境变量可用于指定缓存的位置,以获得更大的灵活性。

其次,Deno 支持锁定文件。 --locklock.json --lock-write 将写入一个锁定文件,其中包含给定负载的所有依赖项的哈希值。 使用 --locklock.json 时,这将用于验证未来的运行。

还有一些命令可以管理可重复的重构。 denocache 将解析所提供模块的所有依赖项并填充 Deno 缓存。 denobundle 可用于生成负载的单个文件“构建”,所有依赖项均已解析并包含在该文件中,因此将来的 denrun 命令仅需要此一个文件。

信任规则

我觉得这是另一个需要突破固有思维的领域。 无论出于何种原因,我们无条件信任集中存储库中的代码。 我们甚至没有考虑这些信任是否合理。 除此之外,我们相信其中的代码已完全审查所有依赖项,因此信任这些依赖项。 我们打开快速搜索框,输入 npminstallsome-random-package,并认为我们已经准备好了。 我认为人们被丰富的 npm 包生态系统宠坏了。

为了抵消懒惰和傲慢的风险,我们在工具链中添加了安全监控软件,它可以剖析我们的依赖关系和无数的代码,告诉我们哪些代码可能存在安全风险。 一些公司开发自己的私有存储库,其中托管的软件包可能会比公共存储库中的软件包经过更严格的初步审查。

这似乎是卧室里的小象。 最好的策略是我们不应该信任任何代码。 只要我们构建这些感知,就会更容易以这种方式看到小象。 而且,如果我们认为包管理器和集中存储库可以解决这个问题,甚至有助于缓解这个问题,那我们就是在自欺欺人。 事实上,我认为他们的受欢迎程度让我们更加警惕。 “反正放在npm上,如果里面有什么隐患,肯定会有人移除的。”

Deno 还没有完全实现,但至少有了一个良好的开端。 它的启动是零信任的,并提供相当细粒度的权限调整。 我个人不喜欢的一件事是 -A 标志,它基本上表示“好吧,然后允许一切”。 如果不弄清楚他们真正需要什么权限,那么遭受重创的开发人员很难抵制它的诱惑。

收回这些权限也很困难,比如“这段代码可以做到这一点,但这里的另一段代码不能”,或者当它提示自己提升权限时弄清楚代码来自哪里来 - 这些是操作非常麻烦。 希望我们能够找到一种易于使用的机制,并结合一些好的、有效的方法来在运行时解决这一挑战。

然而,最近我认为非常好的一个变化是 Deno 不再允许你降级导入。 如果单个内容是从 导出的,则该内容只能从其他位置导出。 这与严格禁止降级传输的浏览器模型是一致的。 不过,我还是认为,从长远来看,最好取消所有不通过的远程导出,就像服务Workers需要HTTPS一样。 我们拭目以待。

依赖管理

我认为我们需要诚实地对待 npm 生态系统中的依赖关系。 说实话,这个生态是有问题的。 在这个生态系统中,这 5 行代码每周产生 3000 万次下载:

但过去 9 年里所有浏览器都有这段代码,Node.js 根本不需要它——这样的生态系统并不正常。 在这个反例中,实际代码只有132字节,但打包后变成了3.4kb。 可运行代码仅占包大小的 3.8%。 “那也好啊!”

我觉得目前的情况有几个原因。 重要的一点是我们走了相反的方向并使用了颠倒的模型。 问题是这些回归模型早已改变了我们创建网站的方式。 虽然没有中央存储库,但在构建网站时,我们会下载所有依赖的代码并将它们烘焙到服务器上加载的内容中,然后用户将一堆代码下载到本地计算机。 一些证据表明,下载的代码中只有大约 10% 是所访问的网站或 Web 应用程序所独有的,其余的代码是我们在开发工作站上下载和打包的代码。 像 Snowpack 这样的解决方案试图解决这些由于方向错误而导致的问题。

另一个重要问题是我们的依赖项没有与我们的代码耦合。 我们将依赖项加载到 package.json 中,但是我们的代码实际上会使用这个依赖项吗? 另一方面,即使我们的代码说我们正在使用另一段代码中的某些内容,但它与前一个版本并没有紧密耦合。 问题是,这另一段代码会直接影响我们正在编写的代码,因为它们之间确实存在依赖关系。

接下来轮到 Deno 模型了,我喜欢将其称为 Deps-in-JS,因为每个人都在使用这些别名。 这些模型显式地将我们的外部依赖声明为 URL,这意味着我们的代码和其他代码之间的依赖关系是简洁的,但是我们的代码和依赖关系将紧密耦合。 要查看依赖关系图,只需在本地或远程模块上使用 denoinfo:

接下来轮到 Deno 模型了,我喜欢将其称为 Deps-in-JS,因为每个人都在使用这些别名。 这些模型显式地将我们的外部依赖声明为 URL,这意味着我们的代码和其他代码之间的依赖关系是简洁的,但是我们的代码和依赖关系将紧密耦合。 要查看依赖关系图,只需在本地或远程模块上使用 denoinfo:

$ deno info https://deno.land/x/oak/examples/server.tslocal: $deno/deps/https/deno.land/d355242ae8430f3116c34165bdae5c156dca21aeef521e45acb51fcd21c9f724type: TypeScriptcompiled: $deno/gen/https/deno.land/x/oak/examples/server.ts.jsmap: $deno/gen/https/deno.land/x/oak/examples/server.ts.js.mapdeps:https://deno.land/x/oak/examples/server.ts  ├── https://deno.land/std@0.53.0/fmt/colors.ts  └─┬ https://deno.land/x/oak/mod.ts    ├─┬ https://deno.land/x/oak/application.ts    │ ├─┬ https://deno.land/x/oak/context.ts    │ │ ├── https://deno.land/x/oak/cookies.ts    │ │ ├─┬ https://deno.land/x/oak/httpError.ts    │ │ │ └─┬ https://deno.land/x/oak/deps.ts    │ │ │ ├── https://deno.land/std@0.53.0/hash/sha256.ts    │ │ │ ├─┬ https://deno.land/std@0.53.0/http/server.ts    │ │ │ │ ├── https://deno.land/std@0.53.0/encoding/utf8.ts    │ │ │ │ ├─┬ https://deno.land/std@0.53.0/io/bufio.ts    │ │ │ │ │ ├─┬ https://deno.land/std@0.53.0/io/util.ts--snip--

Deno 不太关心代码的“版本”。 网址就是网址。 虽然 Deno 需要适当的媒体类型来知道如何处理代码,但有关提供哪些代码的所有“意见”都由 Web 服务器来决定。 服务器可以强制执行其核心内容的语义版本控制,或者执行任意数量的 URL 到所需资源的“神奇”映射。 德诺对此并不关心。 例如,它实际上只是一个 URL 重定向服务器,它重新绘制 URL 以在重定向的 URL 中包含 gitcommit-ish 引用。 这样 @v4.0.0/mod.ts 就完成了,这里 GitHub 扮演了一个很好的版本化模块的角色。 实际上,在整个代码库中散布“版本化”远程 URL 没有多大意义,所以不要这样做。 虽然依赖项只是代码,但最好的部分是您可以按照您想要的任何方式构建它们。 常见的约定是使用 deps.ts,它将重新导入您可能需要的任何依赖项。 看一下 Oak 服务器的例子:

// Copyright 2018-2020 the oak authors. All rights reserved. MIT license.// This file contains the external dependencies that oak depends upon// `std` dependenciesexport { HmacSha256 } from "https://deno.land/std@0.51.0/hash/sha256.ts";export {  Response,  serve,  Server,  ServerRequest,  serveTLS,} from "https://deno.land/std@0.51.0/http/server.ts";export {  Status,  STATUS_TEXT,} from "https://deno.land/std@0.51.0/http/http_status.ts";export {  Cookies,  Cookie,  setCookie,  getCookies,  delCookie,} from "https://deno.land/std@0.51.0/http/cookie.ts";export {  basename,  extname,  join,  isAbsolute,  normalize,  parse,  resolve,  sep,} from "https://deno.land/std@0.51.0/path/mod.ts";export { assert } from "https://deno.land/std@0.51.0/testing/asserts.ts";// 3rd party dependenciesexport {  contentType,  lookup,from "https://deno.land/x/media_types@v2.3.1/mod.ts";

我创建了 Oak 服务器并维护了大约一年半的时间。 在此期间,我经历了 Deno 和 Denostd 库的大约 40 个版本; 其中,我还将media_types从内部连接到Oak,移动了std库,让它从std库中弹出“独立存在”。但我从未想过“嘿,我需要一个包管理器来帮忙”。一TypeScript 的优点之一是你可以完全验证你的代码是否与其他代码兼容。如果你的依赖项是为 Deno 编写的“原始”TypeScript,那是最好的,但是,假设你想利用 TypeScript 对 JavaScript 的预处理,同时仍然安全地使用远程代码。Deno 支持几种不同的方法来执行此操作,但最无缝的是对 X-TypeScript-Types 焦距的支持。此焦距向 Deno 指示类型文件所在的位置,并且可以在键入时使用检查您依赖的 JavaScript 文件。PikaCDN 支持此功能。CDN 上具有与其关联的类型的任何包都将充当该焦点,Deno 也会获取这些类型,并在检测文件类型时使用它。

总而言之,您可能仍然需要将远程(或本地)依赖项“重新映射”到代码中表达的内容。 在这些情况下,可以使用导入映射的不稳定实现。 这是 W3C 运动规范。 它允许提供一个映射,将代码中的特定依赖项映射到另一个源,无论是本地文件还是远程模块。

我们在 Deno 中实现它已经很长时间了,因为我们真的希望它能被广泛采用。 遗憾的是,这只是 Chrome 中的一个实验,尚未得到更广泛的采用。 因此我们决定将其放在 Deno 1.0 中的 --unstable 标志旁边。 个人认为去死西街的可能性还是很大的,应该避免。

然而,然而,然而……

我想仍然会有很多人不同意 Deno 的模型。 我认为 Deno 试图采取的策略(我完全同意)是在出现实际问题时处理它们。 我看到的很多反对意见都来自刚接触 Deno 的新手,他们从未使用过 Deno 项目,也没有尝试理解不同的可能性。

话虽如此,如果我们都遇到同样的问题,但迫切需要对 DenoCLI 进行个别更改,我相信 Deno 会这么做。 而且很多所谓的问题根本不存在,或者还有其他的解决方案,不需要你的运行时做那么多事情,或者耦合外部程序来管理代码。

为此,我希望您在没有包管理器或集中式包存储库的情况下尝试一下,看看结果如何。 你可能永远不会回头!

英文原文:

InfoQ读者交流群上线啦! 小伙伴们可以扫描下方二维码,添加InfoQ助手,回复关键字“入群”即可申请入群。 您可以与InfoQ读者畅所欲言,与编辑近距离接触,赠送超值技术大礼包,参加超值活动,快来加入我们吧!

点击查看更少的错误

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 网站源码 互动吧网站源码-省钱哥科技:高效便捷的JAVA系统源码交易平台,助您成为编程高手 https://www.wkzy.net/game/139715.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务