{"action":"created","comment":{"url":"https://api.github.com/repos/xitu/gold-miner/pulls/comments/186267228","pull_request_review_id":117801118,"id":186267228,"diff_hunk":"@@ -2,356 +2,357 @@\n > * 原文作者：[Malte Ubl](https://medium.com/@cramforce?source=post_header_lockup)\n > * 译文出自：[掘金翻译计划](https://github.com/xitu/gold-miner)\n > * 本文永久链接：[https://github.com/xitu/gold-miner/blob/master/TODO1/designing-very-large-javascript-applications.md](https://github.com/xitu/gold-miner/blob/master/TODO1/designing-very-large-javascript-applications.md)\n-> * 译者：\n-> * 校对者：\n+> * 译者：[Shery](https://github.com/shery15)\n+> * 校对者：[Starrier](https://github.com/Starriers)\n \n-# Designing very large (JavaScript) applications\n+# 设计大型 JavaScript 应用程序\n \n-This is a mildly edited transcript of my JSConf Australia talk. [Watch the whole talk on YouTube](https://www.youtube.com/watch?v=ZZmUwXEiPm4).\n+这是我在 JavaScript 澳大利亚开发者大会（JSConf AU）上演讲内容的文字编辑记录。[在 YouTube 上观看整个演讲视频](https://www.youtube.com/watch?v=ZZmUwXEiPm4)。\n \n ![](https://cdn-images-1.medium.com/max/800/1*DqvlkOgHSKmp5Tu1eX5mdw.png)\n \n-Slide text: Hello, I used to build very large JavaScript applications.\n+幻灯片文本：你好，我曾经构建过非常大型的 JavaScript 应用。\n \n-Hello, I used to build very large JavaScript applications. I don’t really do that anymore, so I thought it was a good time to give a bit of a retrospective and share what I learned. Yesterday I was having a beer at the conference party and I was asked: “Hey Malte, what actually gives you the right, the authority, to talk about the topic?” and I suppose answering this is actually on topic for this talk, although I usually find it a bit weird to talk about myself. So, I build this JavaScript framework at Google. It is used by Photos, Sites, Plus, Drive, Play, the search engine, all these sites. Some of them are pretty large, you might have used a few of them.\n+你好，我曾经构建过非常大型的 JavaScript 应用。我不再那么做了，所以我认为现在是个好时机来回顾并分享我学到的东西。昨天我在会议聚会上喝啤酒时，有人问我：“嘿，马尔特，究竟是什么赋予了你权利和权威，来讲这个话题？”我想这个问题的答案实际上就是这个演讲的主题，尽管我通常觉得谈论自己有点奇怪。大概是因为，我在谷歌构建了这样一个 JavaScript 框架。它被 Google 照片，Google 协作平台，Google+，Google 云端硬盘，Google Play，搜索引擎，所有这些网站使用。其中一些项目非常大，你可能已经使用了其中的一些。\n \n ![](https://cdn-images-1.medium.com/max/800/1*v0r4OVf-RXr9ePakdmv5LQ.png)\n \n-Slide text: I thought React was good.\n+幻灯片文本：我认为 React 很好。\n \n-This Javascript framework is not open source. The reason it is not open source is that it kind of came out at the same time as React and I was like “Does the world really need another JS framework to choose from?”. Google already has a few of those–Angular and Polymer–and felt like another one would confuse people, so I just thought we’d just keep it to ourselves. But besides not being open source, I think there is a lot to learn from it and it is worth sharing the things we learned along the way.\n+这个 Javascript 框架不是开源的。它不是开源的原因是它与 React 同时出现，我想“世界是否真的需要另一个 JS 框架来做选择？”。谷歌已经拥有了一些 JS 框架，Angular 和 Polymer，并且我觉得再有一个会让人们感到困惑，所以我只是认为我们应该把它留给我们自己。但除了不是开源的，我认为还是有很多东西可以从中学习，值得分享我们一路上学到的东西。\n \n ![](https://cdn-images-1.medium.com/max/800/1*LL3uYYDMT5uIFRxR_7JxPQ.png)\n \n-Picture of lots of people.\n+一张人山人海的图片.\n \n-So, let’s talk about very large applications and the things they have in common. Certainly that there might be a lot of developers. It might be a few dozens or even more–and these are humans with feelings and interpersonal problems and you may have to factor that in.\n+所以，我们来谈谈非常大型的应用,以及他们之间的共同点。当然可能会有很多开发者参与其中。可能有几十人甚至更多，他们都有自己的情感和人际问题，你必须要考虑到这一点。\n \n-![](https://cdn-images-1.medium.com/max/800/1*WEH24kaBbar8-1gzN_AO3w.png)Picture of very old building.\n+![](https://cdn-images-1.medium.com/max/800/1*WEH24kaBbar8-1gzN_AO3w.png)一张非常古老建筑的图片.\n \n-And even if your team is not as big, maybe you’ve been working on the thing for a while, and maybe you’re not even the first person maintaining it, you might not have all the context, there might be stuff that you don’t really understand, there might be other people in your team that don’t understand everything about the application. These are the things we have to think about when we build very large applications.\n+即使你的规模不大，也许你已经在这个领域工作了一段时间，也许你甚至不是第一个维护它的人，你可能不了解项目的所有结构或者内容，可能有些东西是你不太明白的，你的团队中可能还有其他人不了解应用程序的所有信息。这些都是我们在构建非常大型的应用程序时，必须考虑的事情。\n \n ![](https://cdn-images-1.medium.com/max/800/1*fzb42X35lNGmkQHhJLhEBQ.png)\n \n-Tweet saying: A team of senior engineers without junior engineers is a team of engineers.\n+推特: 一个没有初级工程师的高级工程师团队是一个工程师团队。\n \n-Another thing I wanted to do here is to give this a bit of context in terms of our careers. I think many of us would consider themselves senior engineers. Or we are not quite there yet, but we want to become one. What I think being senior means is that I’d be able to solve almost every problem that somebody might throw at me. I know my tools, I know my domain. And the other important part of that job is that I make the junior engineers eventually be senior engineers.\n+我想在这里做的另一件事是以我们的职业生涯说明下背景。我想我们很多人会认为自己是高级工程师。或者是还差一点点，但我们想成为一个高级工程师。我认为高级的意思是我几乎可以解决其他人可能抛出的任何问题。我熟悉我的工具，我熟悉我的领域。而这项工作的另一个重要部分是我让初级工程师最终成为高级工程师。\n \n ![](https://cdn-images-1.medium.com/max/800/1*xpRJ1dXHMlFq1V4oDKU__w.png)\n \n-Slide text: Junior -> Senior -> ?\n+幻灯片文本：初级 -> 高级 -> ?\n \n-But what happens is that at some point we may wonder “what might be the next step?”. When we reached that seniority stage, what is the next thing we are going to do? For some of us the answer may be management, but I don’t think that should be the answer for everyone, because not everyone should be a manager, right? Some of us are really great engineers and why shouldn’t we get to do that for the rest of our lives?\n+但是会发生什么呢？在某种程度上，我们可能会怀疑“下一步可能是什么？”。当我们达到这个高级阶段时，我们接下来要做什么？对于我们中的一些人来说，答案可能是做管理，但我认为这不应该成为每个人的答案，因为不是每个人都应该成为管理者，对吗？我们中有些人是非常优秀的工程师，为什么我们不应该在我们的余生中也这样做？\n \n ![](https://cdn-images-1.medium.com/max/800/1*wL5wiTWICj1keue9YZOAhQ.png)\n \n-Slide text: “I know how I would solve the problem”\n+幻灯片文本：“我知道我会如何解决问题”\n \n-I want to propose a way to level up above that senior level. The way I would talk about myself as a senior engineer is that I’d say “I know how I would solve the problem” and because I know how I would solve it I could also teach someone else to do it.\n+我想提出一种方法来升级到高级水平。我把自己当作高级工程师的方式是，我会说：“我知道如何解决这个问题”，并且因为我知道如何解决这个问题，所以我也可以教别人去解决它。\n \n ![](https://cdn-images-1.medium.com/max/800/1*UyLoKH7y54JAYigVlwCJpQ.png)\n \n-Slide text: “I know how others would solve the problem”\n+幻灯片文本：“我知道别人怎么解决这个问题”\n \n-And my theory is that the next level is that I can say about myself “I know how _others_ would solve the problem”.\n+我的理论是，下一个层次是我可以对自己说：“我知道**别人**会如何解决这个问题”。\n \n ![](https://cdn-images-1.medium.com/max/800/1*zBBGLRIZw94gp54pspvx-g.png)\n \n-Slide text: “I can anticipate how API choices and abstractions impact the way other people would solve the problem.”\n+幻灯片文本：“我可以预测 API 选择和抽象如何影响其他人解决问题的方式。”\n \n-Let’s make that a bit more concrete. You make that sentence: “I can anticipate how the API choices that I’m making, or the abstractions that I’m introducing into a project, how they impact how other people would solve a problem.” I think this is a powerful concept that allows me to reason about how the choices I’m making impact an application.\n+让我们更具体一点。你说了这样一句话：“我可以预见我做出 API 选择时，或者我往项目中引入的抽象时，他们如何影响其他人如何解决问题。”我认为这是一个强大的概念，可以让我思考我所做的选择对应用程序的影响。\n \n ![](https://cdn-images-1.medium.com/max/800/1*LnDv6Ry0Hq2MaQEARaD8rg.png)\n \n-Slide text: An application of empathy.\n+幻灯片文本：同理心的应用。\n \n-I would call this an application of empathy. You’re thinking with other software engineers and you’re thinking about how what you do and the APIs that you are giving them, how they impact how they write software.\n+我会称之为同理心的应用。你在和其他软件工程师一起思考，你在思考你所做的事情以及你给他们的 API 是怎么样的，以及它们如何影响其他工程师编写软件。\n \n ![](https://cdn-images-1.medium.com/max/800/1*pnYiZTAfQqsbeS7kVkLe_g.png)\n \n-Slide text: Empathy on easy mode.\n+幻灯片文本：对简易模式感同身受。\n \n-Luckily this is empathy on easy mode. Empathy is generally hard, and this is still very hard. But at least the people that you are having empathy with, they are also other software engineers. And so while they might be very different from you, they at least have in common that they are building software. This type of empathy is really something you can get quite good at as you gain more experience.\n+幸运的是，这是对简易模式感同身受。同理心通常很难，而且这仍然非常困难。但至少与你有同感的人，他们也是软件工程师。尽管他们可能与你截然不同，但他们至少同你一样也在开发软件。当你获得更多的经验时，你可以很擅长的运用这种类型的同理心。\n \n ![](https://cdn-images-1.medium.com/max/800/1*Op0wLWIqwZ-A5iSuWrqtKA.png)\n \n-Slide text: Programming model.\n+幻灯片文本：编程模型。\n \n-Thinking about these topics there is one really important term that I want to talk about, which is the programming model–a word that I’m going to use a lot. It stands for “given a set of APIs, or of libraries, or of frameworks, or of tools–how do people write software in that context.” And my talk is really about, how subtle changes in APIs and so forth, how they impact the programming model.\n+考虑到这些话题，我想谈谈一个非常重要的术语，那就是编程模型，这个词我会用很多次。它代表“给定一套 API，库，框架或工具，人们如何在这种背景下编写软件”。我的演讲内容真的是关于 API 等等的细微变化，如何影响编程模型。\n \n ![](https://cdn-images-1.medium.com/max/800/1*zuLA-tH9b8k4i1yfKMScmA.png)\n \n-Slide text: Programming model impact examples: React, Preact, Redux, Date picker from npm, npm.\n+幻灯片文本：影响编程模型的示例：React，Preact，Redux，Date picker，npm。\n+\n+我想举几个影响编程模型的例子：假设你有一个 Angular 项目，并且你说：“我将把它移植到 React 中”，这显然会改变人们编写软件的方式，对吧？但是接下来你想：“啊哈，60 KB 就为了使用一点虚拟 DOM 操作，让我们切换到 Preact”，这是一个 与 React API 兼容的库，即使你做出了这个选择，它也不会改变人们编写软件的方式。或许随着项目的进展，你会觉得“单单 React 自有的状态管理还不够，应用会变得很复杂，我应该有一些东西来管理应用状态，我会引入 Redux”，这将改变人们编写软件的方式。然后又来了个新需求“我们需要一个日期选择器”，你到 npm 上进行搜索，有 500 个结果，你选了一个日期组件。你挑选哪一个真的很重要吗？它绝对不会改变你编写软件的方式。但是，npm 以及它的庞大生态集合，绝对会改变你编写软件的方式。当然，这几个例子只是一些可能影响人们编写软件的事。\n \n-I want to give a few examples of things that impact the programming model: Let’s say you have an Angular project and you say “I’m going to port this to React” that is obviously going to change how people write software, right? But then you’re like “Ah, 60KB for a bit of virtual DOM munging, let’s switch to Preact”–that is an API compatible library, it is not going to change how people write software, just because you make that choice. Maybe then you’re like “this is all really complex, I should have something orchestrating how my application works, I’m going to introduce Redux.”–that is going to change how people write software. You then get this requirement “we need a date picker” and you go to npm, there are 500 results, you pick one. Does it really matter which one you pick? It definitely won’t change how you write software. But having npm at your fingertips, this vast collection of modules, having that around absolutely changes how you write software. Of course, these are just a few examples of things that might or might impact how people write software.\n \n ![](https://cdn-images-1.medium.com/max/800/1*KfcGnWC3WcwBqGYLPiybgw.png)\n \n-Slide text: Code splitting.\n+幻灯片文本：代码分割.\n \n-Now I want to talk about one aspect that all large JavaScript applications have in common, when you deliver them to users: Which is that they eventually get so big that you don’t want to deliver them all at once. And for this we’ve all introduced this technique called code splitting. What code splitting means is that you define a set of bundles for your application. So, you’re saying “Some users only use this part of my app, some users use another part”, and so you put together bundles that only get downloaded when the part of an application that a user is actually dealing with is executed. This is something all of us can do. Like many things it was invented by the closure compiler–at least in the JavaScript world. But I think the most popular way of doing code splitting is with webpack. And if you are using RollupJS, which is super awesome, they just recently added support for it as well. Definitely something y’all should do, but there are some things to think about when you introduce this to an application, because it does have impact on the programming model.\n+现在我想谈谈所有大型 JavaScript 应用在将它们交付给用户时的一个共同点：它们最终变得非常大，以至于你不希望一开始就把整个应用一次性传输给用户。为此，我们引入了这种称为代码分割的技术。代码分割意味着你为应用程序定义了一组打包。所以，你会说“有些用户只使用我的应用程序的这一部分，有些用户使用另一部分”，因此，当用户实际使用应用程序时，只有使用到的部分才被下载执行。这是我们所有人都可以做到的。像许多事情一样，它是由闭包编译器实现的 —— 至少在 JavaScript 世界中。但我认为使用 webpack 进行代码分割是最流行的方式。如果你使用的是 RollupJS，这是超棒的，他们最近也增加了对代码分割的支持。代码分割绝对是你们应该做的事情，但是当你将它引入到应用程序中时有一些事情需要考虑，因为它确实对编程模型有影响。\n \n ![](https://cdn-images-1.medium.com/max/800/1*vAR8HCbwiwX8bVa0xIsk6g.png)\n \n-Slide text: Sync -> Async.\n+幻灯片文本：同步 -> 异步。\n \n-You have things that used to be sync that now become async. Without code splitting your application is nice and simple. There is this one big thing. It starts up, and then it is stable, you can reason about it, you don’t have to wait for stuff. With code splitting, you might sometimes say “Oh, I need that bundle”, so you now need to go to the network, and you have to factor in that this can happen, and so the applications becomes more complex.\n+你有过去是同步现在成为异步的东西。你的应用程序在没有代码分割时，简单美好。有一件大事。它启动，然后它很稳定，你了解它的前世今生，你不必等待资源加载。有了代码分割后，有时候你可能会说“哦，我需要那个打包文件”，所以你现在需要利用网络来获取所需的文件，这也使得你必须考虑网络可能出现异常情况，所以应用程序也变得更加复杂。\n \n ![](https://cdn-images-1.medium.com/max/800/1*DqT7As1rm_M9cxyW1RIW6w.png)\n \n-Slide text: Human.\n+幻灯片文本：人性化。\n \n-Also, we have humans entering the field, because code splitting requires you to define bundles, and it requires you to think about when to load them, so these humans, engineers on your team, they now have to make decisions what is going into which bundle and when to load that bundle. Every time you have a human involved, that clearly impacts the programming model, because they have to think about such things.\n+此外，我们需要有人介入，因为代码拆分需要你定义如何打包，需要你考虑何时加载它们，所以，那些在你们团队的工程师们现在必须决定哪些文件打包到一起，什么时候加载那些打包文件。每次有人介入时，都会明显影响编程模型，因为他们必须考虑这些问题。\n \n ![](https://cdn-images-1.medium.com/max/800/1*0jNa8A5ciY6pCJCN65vLiA.png)\n \n-Slide text: Route based code splitting.\n+幻灯片文本：基于路由的代码分割。\n \n-There is one very established way that solves this problem, that gets the human out of the mess when doing code splitting, which is called route based code splitting. If you’re not using code splitting yet, that is probably how you should do it as a first cut. Routes are the baseline URL structure of your application. You might, for example, have your product pages on `/product/` and you might have your category pages somewhere else. You just make each route one bundle, and your router in your application now understands there is code splitting. And whenever the user goes to a route, the router loads the associated bundle, and then within that route you can forget about code splitting existing. Now you are back to the programming model that is almost the same as having a big bundle for everything. It is a really nice way to do this, and definitely a good first step.\n+有一种非常成熟的方法可以解决这个问题，它可以将我们从进行代码分割的混乱中解脱出来，它被称作基于路由的代码分割。如果你还没有使用代码分割，那它可能是你初次进行代码分割的方式。路由将应用程序以 URL 粒度进行分割。例如，你的产品页面可能在 `/product/` 上，并且你的分类页面可能在其他地方。你只需将每个路由用的文件打包到一起，然后你的应用程序将根据路由自动进行代码分割。无论何时用户访问路由，路由都会加载相关的打包文件，有了路由之后，你可以忘记代码分割的存在。再从编程模型上来看，这几乎与将所有东西都有打包到一起一样。这是一种非常好的代码分割方法，绝对是个好的开始。","path":"TODO1/designing-very-large-javascript-applications.md","position":148,"original_position":148,"commit_id":"3a7367f96a69cbbccb2b7e1b93ec14e037e4faa9","original_commit_id":"56f98c89f1fe94f70c33d2061326603eab24c07c","user":{"login":"allenlongbaobao","id":3255868,"avatar_url":"https://avatars3.githubusercontent.com/u/3255868?v=4","gravatar_id":"","url":"https://api.github.com/users/allenlongbaobao","html_url":"https://github.com/allenlongbaobao","followers_url":"https://api.github.com/users/allenlongbaobao/followers","following_url":"https://api.github.com/users/allenlongbaobao/following{/other_user}","gists_url":"https://api.github.com/users/allenlongbaobao/gists{/gist_id}","starred_url":"https://api.github.com/users/allenlongbaobao/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allenlongbaobao/subscriptions","organizations_url":"https://api.github.com/users/allenlongbaobao/orgs","repos_url":"https://api.github.com/users/allenlongbaobao/repos","events_url":"https://api.github.com/users/allenlongbaobao/events{/privacy}","received_events_url":"https://api.github.com/users/allenlongbaobao/received_events","type":"User","site_admin":false},"body":"[将所有东西都有打包到一起] \r\n去掉有","created_at":"2018-05-05T17:08:26Z","updated_at":"2018-05-05T17:35:46Z","html_url":"https://github.com/xitu/gold-miner/pull/3721#discussion_r186267228","pull_request_url":"https://api.github.com/repos/xitu/gold-miner/pulls/3721","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/xitu/gold-miner/pulls/comments/186267228"},"html":{"href":"https://github.com/xitu/gold-miner/pull/3721#discussion_r186267228"},"pull_request":{"href":"https://api.github.com/repos/xitu/gold-miner/pulls/3721"}}},"pull_request":{"url":"https://api.github.com/repos/xitu/gold-miner/pulls/3721","id":184666579,"html_url":"https://github.com/xitu/gold-miner/pull/3721","diff_url":"https://github.com/xitu/gold-miner/pull/3721.diff","patch_url":"https://github.com/xitu/gold-miner/pull/3721.patch","issue_url":"https://api.github.com/repos/xitu/gold-miner/issues/3721","number":3721,"state":"closed","locked":false,"title":"设计大型 JavaScript 应用程序","user":{"login":"shery15","id":12773365,"avatar_url":"https://avatars1.githubusercontent.com/u/12773365?v=4","gravatar_id":"","url":"https://api.github.com/users/shery15","html_url":"https://github.com/shery15","followers_url":"https://api.github.com/users/shery15/followers","following_url":"https://api.github.com/users/shery15/following{/other_user}","gists_url":"https://api.github.com/users/shery15/gists{/gist_id}","starred_url":"https://api.github.com/users/shery15/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shery15/subscriptions","organizations_url":"https://api.github.com/users/shery15/orgs","repos_url":"https://api.github.com/users/shery15/repos","events_url":"https://api.github.com/users/shery15/events{/privacy}","received_events_url":"https://api.github.com/users/shery15/received_events","type":"User","site_admin":false},"body":"设计大型 JavaScript 应用程序\r\n\r\n译文翻译完成，resolve #3676\r\n","created_at":"2018-04-27T16:14:01Z","updated_at":"2018-05-05T17:35:46Z","closed_at":"2018-05-05T14:45:07Z","merged_at":"2018-05-05T14:45:07Z","merge_commit_sha":"5738193e2f0bcf2f69da7da5bedb816652e6a16b","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":514335594,"url":"https://api.github.com/repos/xitu/gold-miner/labels/%E5%89%8D%E7%AB%AF","name":"前端","color":"1d76db","default":false},{"id":322083945,"url":"https://api.github.com/repos/xitu/gold-miner/labels/%E7%BF%BB%E8%AF%91%E5%AE%8C%E6%88%90","name":"翻译完成","color":"c5def5","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/xitu/gold-miner/pulls/3721/commits","review_comments_url":"https://api.github.com/repos/xitu/gold-miner/pulls/3721/comments","review_comment_url":"https://api.github.com/repos/xitu/gold-miner/pulls/comments{/number}","comments_url":"https://api.github.com/repos/xitu/gold-miner/issues/3721/comments","statuses_url":"https://api.github.com/repos/xitu/gold-miner/statuses/3a7367f96a69cbbccb2b7e1b93ec14e037e4faa9","head":{"label":"shery15:translation/designing-very-large-javascript-applications.md","ref":"translation/designing-very-large-javascript-applications.md","sha":"3a7367f96a69cbbccb2b7e1b93ec14e037e4faa9","user":{"login":"shery15","id":12773365,"avatar_url":"https://avatars1.githubusercontent.com/u/12773365?v=4","gravatar_id":"","url":"https://api.github.com/users/shery15","html_url":"https://github.com/shery15","followers_url":"https://api.github.com/users/shery15/followers","following_url":"https://api.github.com/users/shery15/following{/other_user}","gists_url":"https://api.github.com/users/shery15/gists{/gist_id}","starred_url":"https://api.github.com/users/shery15/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shery15/subscriptions","organizations_url":"https://api.github.com/users/shery15/orgs","repos_url":"https://api.github.com/users/shery15/repos","events_url":"https://api.github.com/users/shery15/events{/privacy}","received_events_url":"https://api.github.com/users/shery15/received_events","type":"User","site_admin":false},"repo":{"id":130338606,"name":"gold-miner","full_name":"shery15/gold-miner","owner":{"login":"shery15","id":12773365,"avatar_url":"https://avatars1.githubusercontent.com/u/12773365?v=4","gravatar_id":"","url":"https://api.github.com/users/shery15","html_url":"https://github.com/shery15","followers_url":"https://api.github.com/users/shery15/followers","following_url":"https://api.github.com/users/shery15/following{/other_user}","gists_url":"https://api.github.com/users/shery15/gists{/gist_id}","starred_url":"https://api.github.com/users/shery15/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shery15/subscriptions","organizations_url":"https://api.github.com/users/shery15/orgs","repos_url":"https://api.github.com/users/shery15/repos","events_url":"https://api.github.com/users/shery15/events{/privacy}","received_events_url":"https://api.github.com/users/shery15/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/shery15/gold-miner","description":"🥇掘金翻译计划，可能是世界最大最好的英译中技术社区，最懂读者和译者的翻译平台：","fork":true,"url":"https://api.github.com/repos/shery15/gold-miner","forks_url":"https://api.github.com/repos/shery15/gold-miner/forks","keys_url":"https://api.github.com/repos/shery15/gold-miner/keys{/key_id}","collaborators_url":"https://api.github.com/repos/shery15/gold-miner/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/shery15/gold-miner/teams","hooks_url":"https://api.github.com/repos/shery15/gold-miner/hooks","issue_events_url":"https://api.github.com/repos/shery15/gold-miner/issues/events{/number}","events_url":"https://api.github.com/repos/shery15/gold-miner/events","assignees_url":"https://api.github.com/repos/shery15/gold-miner/assignees{/user}","branches_url":"https://api.github.com/repos/shery15/gold-miner/branches{/branch}","tags_url":"https://api.github.com/repos/shery15/gold-miner/tags","blobs_url":"https://api.github.com/repos/shery15/gold-miner/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/shery15/gold-miner/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/shery15/gold-miner/git/refs{/sha}","trees_url":"https://api.github.com/repos/shery15/gold-miner/git/trees{/sha}","statuses_url":"https://api.github.com/repos/shery15/gold-miner/statuses/{sha}","languages_url":"https://api.github.com/repos/shery15/gold-miner/languages","stargazers_url":"https://api.github.com/repos/shery15/gold-miner/stargazers","contributors_url":"https://api.github.com/repos/shery15/gold-miner/contributors","subscribers_url":"https://api.github.com/repos/shery15/gold-miner/subscribers","subscription_url":"https://api.github.com/repos/shery15/gold-miner/subscription","commits_url":"https://api.github.com/repos/shery15/gold-miner/commits{/sha}","git_commits_url":"https://api.github.com/repos/shery15/gold-miner/git/commits{/sha}","comments_url":"https://api.github.com/repos/shery15/gold-miner/comments{/number}","issue_comment_url":"https://api.github.com/repos/shery15/gold-miner/issues/comments{/number}","contents_url":"https://api.github.com/repos/shery15/gold-miner/contents/{+path}","compare_url":"https://api.github.com/repos/shery15/gold-miner/compare/{base}...{head}","merges_url":"https://api.github.com/repos/shery15/gold-miner/merges","archive_url":"https://api.github.com/repos/shery15/gold-miner/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/shery15/gold-miner/downloads","issues_url":"https://api.github.com/repos/shery15/gold-miner/issues{/number}","pulls_url":"https://api.github.com/repos/shery15/gold-miner/pulls{/number}","milestones_url":"https://api.github.com/repos/shery15/gold-miner/milestones{/number}","notifications_url":"https://api.github.com/repos/shery15/gold-miner/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/shery15/gold-miner/labels{/name}","releases_url":"https://api.github.com/repos/shery15/gold-miner/releases{/id}","deployments_url":"https://api.github.com/repos/shery15/gold-miner/deployments","created_at":"2018-04-20T09:11:35Z","updated_at":"2018-04-20T09:11:54Z","pushed_at":"2018-05-05T16:44:00Z","git_url":"git://github.com/shery15/gold-miner.git","ssh_url":"git@github.com:shery15/gold-miner.git","clone_url":"https://github.com/shery15/gold-miner.git","svn_url":"https://github.com/shery15/gold-miner","homepage":"https://juejin.im/tag/掘金翻译计划","size":31758,"stargazers_count":1,"watchers_count":1,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"xitu:master","ref":"master","sha":"ede20941d05ceb60def755331a88a0a1e4d65737","user":{"login":"xitu","id":10482599,"avatar_url":"https://avatars2.githubusercontent.com/u/10482599?v=4","gravatar_id":"","url":"https://api.github.com/users/xitu","html_url":"https://github.com/xitu","followers_url":"https://api.github.com/users/xitu/followers","following_url":"https://api.github.com/users/xitu/following{/other_user}","gists_url":"https://api.github.com/users/xitu/gists{/gist_id}","starred_url":"https://api.github.com/users/xitu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xitu/subscriptions","organizations_url":"https://api.github.com/users/xitu/orgs","repos_url":"https://api.github.com/users/xitu/repos","events_url":"https://api.github.com/users/xitu/events{/privacy}","received_events_url":"https://api.github.com/users/xitu/received_events","type":"Organization","site_admin":false},"repo":{"id":45512989,"name":"gold-miner","full_name":"xitu/gold-miner","owner":{"login":"xitu","id":10482599,"avatar_url":"https://avatars2.githubusercontent.com/u/10482599?v=4","gravatar_id":"","url":"https://api.github.com/users/xitu","html_url":"https://github.com/xitu","followers_url":"https://api.github.com/users/xitu/followers","following_url":"https://api.github.com/users/xitu/following{/other_user}","gists_url":"https://api.github.com/users/xitu/gists{/gist_id}","starred_url":"https://api.github.com/users/xitu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xitu/subscriptions","organizations_url":"https://api.github.com/users/xitu/orgs","repos_url":"https://api.github.com/users/xitu/repos","events_url":"https://api.github.com/users/xitu/events{/privacy}","received_events_url":"https://api.github.com/users/xitu/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/xitu/gold-miner","description":"🥇掘金翻译计划，可能是世界最大最好的英译中技术社区，最懂读者和译者的翻译平台：","fork":false,"url":"https://api.github.com/repos/xitu/gold-miner","forks_url":"https://api.github.com/repos/xitu/gold-miner/forks","keys_url":"https://api.github.com/repos/xitu/gold-miner/keys{/key_id}","collaborators_url":"https://api.github.com/repos/xitu/gold-miner/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/xitu/gold-miner/teams","hooks_url":"https://api.github.com/repos/xitu/gold-miner/hooks","issue_events_url":"https://api.github.com/repos/xitu/gold-miner/issues/events{/number}","events_url":"https://api.github.com/repos/xitu/gold-miner/events","assignees_url":"https://api.github.com/repos/xitu/gold-miner/assignees{/user}","branches_url":"https://api.github.com/repos/xitu/gold-miner/branches{/branch}","tags_url":"https://api.github.com/repos/xitu/gold-miner/tags","blobs_url":"https://api.github.com/repos/xitu/gold-miner/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/xitu/gold-miner/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/xitu/gold-miner/git/refs{/sha}","trees_url":"https://api.github.com/repos/xitu/gold-miner/git/trees{/sha}","statuses_url":"https://api.github.com/repos/xitu/gold-miner/statuses/{sha}","languages_url":"https://api.github.com/repos/xitu/gold-miner/languages","stargazers_url":"https://api.github.com/repos/xitu/gold-miner/stargazers","contributors_url":"https://api.github.com/repos/xitu/gold-miner/contributors","subscribers_url":"https://api.github.com/repos/xitu/gold-miner/subscribers","subscription_url":"https://api.github.com/repos/xitu/gold-miner/subscription","commits_url":"https://api.github.com/repos/xitu/gold-miner/commits{/sha}","git_commits_url":"https://api.github.com/repos/xitu/gold-miner/git/commits{/sha}","comments_url":"https://api.github.com/repos/xitu/gold-miner/comments{/number}","issue_comment_url":"https://api.github.com/repos/xitu/gold-miner/issues/comments{/number}","contents_url":"https://api.github.com/repos/xitu/gold-miner/contents/{+path}","compare_url":"https://api.github.com/repos/xitu/gold-miner/compare/{base}...{head}","merges_url":"https://api.github.com/repos/xitu/gold-miner/merges","archive_url":"https://api.github.com/repos/xitu/gold-miner/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/xitu/gold-miner/downloads","issues_url":"https://api.github.com/repos/xitu/gold-miner/issues{/number}","pulls_url":"https://api.github.com/repos/xitu/gold-miner/pulls{/number}","milestones_url":"https://api.github.com/repos/xitu/gold-miner/milestones{/number}","notifications_url":"https://api.github.com/repos/xitu/gold-miner/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/xitu/gold-miner/labels{/name}","releases_url":"https://api.github.com/repos/xitu/gold-miner/releases{/id}","deployments_url":"https://api.github.com/repos/xitu/gold-miner/deployments","created_at":"2015-11-04T03:29:13Z","updated_at":"2018-05-05T16:11:31Z","pushed_at":"2018-05-05T15:00:18Z","git_url":"git://github.com/xitu/gold-miner.git","ssh_url":"git@github.com:xitu/gold-miner.git","clone_url":"https://github.com/xitu/gold-miner.git","svn_url":"https://github.com/xitu/gold-miner","homepage":"https://juejin.im/tag/掘金翻译计划","size":32184,"stargazers_count":13576,"watchers_count":13576,"language":null,"has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2402,"mirror_url":null,"archived":false,"open_issues_count":39,"license":null,"forks":2402,"open_issues":39,"watchers":13576,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/xitu/gold-miner/pulls/3721"},"html":{"href":"https://github.com/xitu/gold-miner/pull/3721"},"issue":{"href":"https://api.github.com/repos/xitu/gold-miner/issues/3721"},"comments":{"href":"https://api.github.com/repos/xitu/gold-miner/issues/3721/comments"},"review_comments":{"href":"https://api.github.com/repos/xitu/gold-miner/pulls/3721/comments"},"review_comment":{"href":"https://api.github.com/repos/xitu/gold-miner/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/xitu/gold-miner/pulls/3721/commits"},"statuses":{"href":"https://api.github.com/repos/xitu/gold-miner/statuses/3a7367f96a69cbbccb2b7e1b93ec14e037e4faa9"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"allenlongbaobao"}}