[译] 定制 create-react-app:如何制作自己的模版

原文:https://auth0.com/blog/how-to-configure-create-react-app/#Test-Your-Custom-Script

TL;DR:有多种可用的工具能帮助开发者构建不同种类的网站和应用。其中之一就是  Create React App(CRA) ,该 CLI 工具帮助 JavaScript 开发者不用配置就能创建 React 应用。可即便是应用了  CRA 这么棒的工具,开发者仍需要稍作调整,增加 CRA 中不含的特别的脚本和模块等。今天,我将教你如何为自己的团队创建自定义的  create-react-app 脚本。

许多开发者已经使用了   create-react -app   来构建他们的 React 应用,但像我之前提到的,开发者仍呼吁更多的配置选项。 其中一些希望获得的支持是:

  • PostCSS

  • CSS Modules

  • LESS

  • SASS

  • ES7

  • MobX

  • 服务器渲染

…以及更多开箱可用的功能。

有很多包括 JavaScript 新人在内的开发者,一天天的简直是胡乱地创建 React 应用,所以 Facebook 的 CRA 团队才构建了 create-react-app 工具以使创建此类应用的过程更快更安全。

作为一个需要支持以上我高亮过的功能的开发者,一个办法就是运行 npm run eject 。这条命令拷贝所有配置文件和依赖到你的项目中,然后你可以通过所有这些工具手动配置你的应用以达到满意。

开发者面对 eject 时的主要挑战一是无法再享受 CRA 之后的新特性了,二是在团队内同步设置会非常低效。解决的一个好办法是为你的团队发布一个  react-scripts 的 fork 库,然后所有团队中的开发者只需要运行  create-react-app my-app --scripts-version mycompany-react-scripts 就能拥有完全相同的设置了!

创建一个 fork

打开 GitHub 仓库并 fork 一个 create-react-app 库。

注意:推荐 fork 最新的 stable 分支。Master 是不稳定的。

packages 目录内,有一个叫做  react-scripts 的文件夹。该文件夹包含了用于构建、测试和启动你的应用的脚本。事实上,这就是我们能作出改进的地方,可以配置并增加新的脚本和模版。

改进配置

clone 目录后在代码编辑器中打开 react-scripts/scripts/init.js 文件。让我们增加一些 console 信息:

......
......
console.log(chalk.red('VERY IMPORTANT:'));
console.log('Create a .env file at the root of your project with REACT_APP_EMPLOYEE_ID and REACT_APP_POSITION_ID');
console.log('  You can find these values in the company dashboard under application settings.');
console.log('  https://company.bamboohr.com/settings');
console.log();
.......

现在,来更改模版。

打开 react-scripts/template/src/App.js 并将其内容替换为:

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';

class App extends Component {

  getEnvValues() {
    if (!process.env.REACT_APP_EMPLOYEE_ID || !process.env.REACT_APP_POSITION_ID) {
      throw new Error('Please define `REACT_APP_EMPLOYEE_ID` and `REACT_APP_POSITION_ID` in your .env file');
    }

    const employeeID = process.env.REACT_APP_EMPLOYEE_ID
    const position = process.env.REACT_APP_POSITION_ID;

    return { employeeID, position };
  }

  render() {

    const { employeeID, position } = this.getEnvValues();

    return (
      
logo

Welcome to Unicode Labs

Employee ID: { employeeID }

Position: { position }

); } } export default App;

然后,到 react-scripts/template/public 目录中,打开  index.html 文件并将  </code> 标签的内容改为  <code>Unicode Labs</code> 。 </p> <p>也可以将 favicon 改为你们公司的 — 你能随意修改或增加若干团队常用的模版。</p> <p> 在 <code>react-scripts/template</code> 目录中创建一个内容如下的  <code>.env.example</code> 文件: </p> <pre>REACT_APP_EMPLOYEE_ID='44566' REACT_APP_POSITION_ID='ENGR'</pre> <p> 一旦用这个版本的 <code>create-react-app</code> 工具安装完了  <code>react-scripts</code> ,用户就必须将  <code>.env.example</code> 文件重命名为  <code>.env</code> 。你应当将此说明写入  <code>README</code> 文件。 </p> <p> 注意: <em>CRA</em> 已经支持了自定义的 env 变量,只要你愿意将  <strong>REACT_APP</strong> 作为变量前缀的话。 </p> <p>这就是所有我们需要的!</p> <h2>发布 react-scripts 到 NPM</h2> <p> 在发布到 npm 之前,我们需要将 <code>react-scripts/package.json</code> 文件中  <code>name</code> 属性的值改为  <code>unicodelabs-react-scripts</code> 。 </p> <p> 同时将 <code>description</code> 的值改为  <code>Unicodelabs Configuration and scripts for Create React App.</code> 、将  <code>repository</code> 的值指向正确的地址(本例中为  <code>unicodelabs/create-react-app</code> )。 </p> <p> 现在,从终端中进入 <code>react-scripts</code> 目录: </p> <p>登录到 npm:</p> <p>按提示进行,并发布。</p> <h2>测试自定义脚本</h2> <p>在终端中运行:</p> <pre>create-react-app test-app --scripts-version unicodelabs-react-scripts</pre> <p> 在你自己的案例中可能会是 <code>yourname-react-scripts</code> ,其中  <code>yourname</code> 是你自己的公司名或者别的什么自定义的命名。 </p> <p> <span> <em>CRA</em> 会执行安装,然后你将 </span> <span>看到:</span> </p> <p> <img src="https://img2.tuicool.com/NNrQnaZ.png!web"></p> <p>记得吗?我们早先把这些信息放在了代码里。太棒了!</p> <p> 现在,在终端中进入 <code>test-app</code> 目录,重命名  <code>.env.example</code> 为  <code>.env</code> 并运行  <code>npm start</code> 命令。 </p> <p>你的应用会以新模版启动:</p> <p> <img src="https://img1.tuicool.com/yEbiMzV.jpg!web"></p> <h2>总结</h2> <p> 好的程序员会日常不断地打磨他们的工具以提高生产力。 <em>CRA</em> 是一个快速创建 React 应用的利器。此外,fork 并定制化自己的  <code>react-scripts</code> 能帮助你和团队容易地增加所有需要的配置。你需要维护你的 fork,并  <em>保持其和上游的同步</em> (https://help.github.com/articles/fork-a-repo/#keep-your-fork-synced) 以获得所有更新。Backstroke 是能帮助你完成这种功能的一个机器人程序。 </p> <p> –End– </p> <p> <img src="https://img2.tuicool.com/n2MZBvq.jpg!web"></p> <p>查看更多前端好文</p> <p>请搜索 fewelife 关注公众号</p> <p>转载请注明出处</p> </div> <!-- Start Tags --> <div class="tags"></div> <!-- End Tags --> </div><!-- End Content --> <!-- Start Related Posts --> <div class="related-posts"><div class="postauthor-top"><h3>Related Posts</h3></div> <article class="post excerpt "> <a href="https://www.go2live.cn/nocate/%e5%b7%b4%e6%af%94%e7%89%b9%e4%b8%93%e6%a0%8f-%e5%88%98%e6%98%8c%e7%94%a8%ef%bc%9a%e6%af%94%e7%89%b9%e5%b8%81%e6%89%a9%e5%ae%b9%e4%b9%8b%e4%ba%89%e5%a7%8b%e6%9c%ab.html" title="巴比特专栏 | 刘昌用:比特币扩容之争始末" id="featured-thumbnail"> <header> <h4 class="title front-view-title">巴比特专栏 | 刘昌用:比特币扩容之争始末</h4> </header> </a> </article><!--.post.excerpt--> <article class="post excerpt "> <a href="https://www.go2live.cn/nocate/p2p%e6%8a%80%e6%9c%af%e8%af%a6%e8%a7%a3%e4%b8%89%ef%bc%9ap2p%e4%b8%ad%e7%9a%84nat%e7%a9%bf%e8%b6%8a%e6%89%93%e6%b4%9e%e6%96%b9%e6%a1%88%e8%af%a6%e8%a7%a3%e8%bf%9b%e9%98%b6%e5%88%86%e6%9e%90.html" title="P2P技术详解(三):P2P中的NAT穿越(打洞)方案详解(进阶分析篇)" id="featured-thumbnail"> <header> <h4 class="title front-view-title">P2P技术详解(三):P2P中的NAT穿越(打洞)方案详解(进阶分析篇)</h4> </header> </a> </article><!--.post.excerpt--> <article class="post excerpt last"> <a href="https://www.go2live.cn/nocate/%e8%ae%ba%e6%96%87%e6%b5%85%e5%b0%9d-%e9%80%9a%e8%bf%87%e6%96%87%e6%9c%ac%e5%88%b0%e6%96%87%e6%9c%ac%e7%a5%9e%e7%bb%8f%e9%97%ae%e9%a2%98%e7%94%9f%e6%88%90%e7%9a%84%e6%9c%ba%e5%99%a8%e7%90%86.html" title="论文浅尝 | 通过文本到文本神经问题生成的机器理解" id="featured-thumbnail"> <header> <h4 class="title front-view-title">论文浅尝 | 通过文本到文本神经问题生成的机器理解</h4> </header> </a> </article><!--.post.excerpt--> </div> <!-- End Related Posts --> <!-- Start Author Box --> <div class="postauthor"> <h4>About The Author</h4> <img alt='' src='https://secure.gravatar.com/avatar/3ad193fb04cf7a9dabbb0140522a0178?s=85&d=monsterid&r=g' srcset='https://secure.gravatar.com/avatar/3ad193fb04cf7a9dabbb0140522a0178?s=170&d=monsterid&r=g 2x' class='avatar avatar-85 photo' height='85' width='85' /> <h5>stack</h5> <p></p> </div> <!-- End Author Box --> <!-- You can start editing here. --> </div> </div> </article> <!-- End Article --> <!-- Start Sidebar --> <aside class="sidebar c-4-12"> <div id="sidebars" class="sidebar"> <div class="sidebar_list"> <div id="search-2" class="widget widget_search"><form method="get" id="searchform" class="search-form" action="https://www.go2live.cn" _lpchecked="1"> <fieldset> <input type="text" name="s" id="s" value="Search this site..." onblur="if (this.value == '') {this.value = 'Search this site...';}" onfocus="if (this.value == 'Search this site...') {this.value = '';}" > <input type="submit" value="Search" /> </fieldset> </form> </div><div id="linkcat-115" class="widget widget_links"><h3 class="widget-title"><span>友情链接</span></h3> <ul class='xoxo blogroll'> <li><a href="http://mooc.guokr.com/course/" target="_blank">mooc学院-综合学习</a></li> <li><a href="http://www.guanyuwu.com" rel="acquaintance sweetheart" target="_blank">创意手工分享</a></li> <li><a href="http://www.tuijiankan.com/" rel="friend" target="_blank">向阳博客</a></li> <li><a href="http://blog.devtang.com/" target="_blank">唐巧的技术博客-研发</a></li> <li><a href="http://www.liaoxuefeng.com/" target="_blank">廖雪峰官方网站-研发</a></li> <li><a href="http://weappdev.com/" target="_blank">微信小程序开发论坛</a></li> <li><a href="https://guanyuwu.taobao.com">直男送礼好去处</a></li> <li><a href="http://coolshell.cn/">酷壳-研发</a></li> <li><a href="http://www.ruanyifeng.com/blog/" target="_blank">阮一峰博客-研发-前端</a></li> <li><a href="http://www.laruence.com/" target="_blank">鸟哥博客-php专家</a></li> <li><a href="http://gongfuxiang.com/" target="_blank">龚福祥的博客-研发</a></li> </ul> </div> <div id="pages-10" class="widget widget_pages"><h3 class="widget-title"><span>页面</span></h3> <ul> <li class="page_item page-item-86"><a href="https://www.go2live.cn/it%e4%bc%81%e4%b8%9a">互联网it企业一览</a></li> <li class="page_item page-item-135484"><a href="https://www.go2live.cn/%e5%85%b3%e4%ba%8e">关于</a></li> <li class="page_item page-item-396503 page_item_has_children"><a href="https://www.go2live.cn/%e5%8f%82%e8%80%83%e6%89%8b%e5%86%8c">参考手册</a> <ul class='children'> <li class="page_item page-item-346526"><a href="https://www.go2live.cn/%e5%8f%82%e8%80%83%e6%89%8b%e5%86%8c/go%e6%8a%80%e6%9c%af%e9%80%89%e5%9e%8b">go技术选型</a></li> <li class="page_item page-item-346528 page_item_has_children"><a href="https://www.go2live.cn/%e5%8f%82%e8%80%83%e6%89%8b%e5%86%8c/go%e8%af%ad%e8%a8%80%e5%8f%82%e8%80%83">go语言参考</a> <ul class='children'> <li class="page_item page-item-392240"><a href="https://www.go2live.cn/%e5%8f%82%e8%80%83%e6%89%8b%e5%86%8c/go%e8%af%ad%e8%a8%80%e5%8f%82%e8%80%83/%e6%8e%a8%e8%8d%90%e4%b9%a6%e7%9b%ae">推荐书目</a></li> </ul> </li> <li class="page_item page-item-396501"><a href="https://www.go2live.cn/%e5%8f%82%e8%80%83%e6%89%8b%e5%86%8c/ssh%e4%bd%bf%e7%94%a8%e4%bb%8b%e7%bb%8d">ssh使用介绍</a></li> </ul> </li> <li class="page_item page-item-4972"><a href="https://www.go2live.cn/%e6%bc%94%e9%81%93%e5%85%ac%e4%bc%97%e5%8f%b7%e8%ae%a2%e9%98%85%e8%af%b4%e6%98%8e">演道公众号订阅说明</a></li> <li class="page_item page-item-72"><a href="https://www.go2live.cn/%e8%8b%b1%e6%96%87%e5%9c%b0%e5%9d%80%e5%86%99%e6%b3%95">英文地址写法</a></li> </ul> </div><div id="calendar-5" class="widget widget_calendar"><div id="calendar_wrap" class="calendar_wrap"><table id="wp-calendar"> <caption>2024年四月</caption> <thead> <tr> <th scope="col" title="星期一">M</th> <th scope="col" title="星期二">T</th> <th scope="col" title="星期三">W</th> <th scope="col" title="星期四">T</th> <th scope="col" title="星期五">F</th> <th scope="col" title="星期六">S</th> <th scope="col" title="星期日">S</th> </tr> </thead> <tfoot> <tr> <td colspan="3" id="prev"><a href="https://www.go2live.cn/2022/01">« Jan</a></td> <td class="pad"> </td> <td colspan="3" id="next" class="pad"> </td> </tr> </tfoot> <tbody> <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td> </tr> <tr> <td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td> </tr> <tr> <td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td id="today">20</td><td>21</td> </tr> <tr> <td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td> </tr> <tr> <td>29</td><td>30</td> <td class="pad" colspan="5"> </td> </tr> </tbody> </table></div></div><div id="categories-3" class="widget widget_categories"><h3 class="widget-title"><span>分类目录</span></h3> <ul> <li class="cat-item cat-item-16"><a href="https://www.go2live.cn/category/program/android" title="android的四种启动模式,与五大布局,五种存储模式,四大组件::::::演道网Andriod专栏提供Andriod基础概念,具体代码演示,方便大家深入理解和运用Android。大部分代码可以直接使用。">Android</a> </li> <li class="cat-item cat-item-269"><a href="https://www.go2live.cn/category/program/go" title="go,golang,go编程语言,golang编程, go web, go 分布式, go 并发">go</a> </li> <li class="cat-item cat-item-4"><a href="https://www.go2live.cn/category/program/ios" title="iOS开发入门和提高::::::演道网IOS专栏提供一线IOS研发人员在工作学习过程中的经验总结。让大家少走弯路。">iOS</a> </li> <li class="cat-item cat-item-80"><a href="https://www.go2live.cn/category/program/java" title="java入门与提高::::::演道网java专栏提供一线java研发人员在学习工作中的经验,减少大家走的弯路,大量源码可以直接使用。">java</a> </li> <li class="cat-item cat-item-6"><a href="https://www.go2live.cn/category/basic/linux" >linux学习</a> </li> <li class="cat-item cat-item-79"><a href="https://www.go2live.cn/category/program/php" title="php入门与提高::::::演道网php专栏提供一线php研发人员在学习工作中的经验,减少大家走的弯路,大量源码可以直接使用。">php</a> </li> <li class="cat-item cat-item-81"><a href="https://www.go2live.cn/category/program/python" title="python入门与提高::::::演道网python专栏提供一线python研发人员在学习工作中的经验,减少大家走的弯路,大量源码可以直接使用。">python</a> </li> <li class="cat-item cat-item-82"><a href="https://www.go2live.cn/category/practice/shell" >shell</a> </li> <li class="cat-item cat-item-105"><a href="https://www.go2live.cn/category/prd/design" >UI设计</a> </li> <li class="cat-item cat-item-11"><a href="https://www.go2live.cn/category/dev/web" >web</a> </li> <li class="cat-item cat-item-22"><a href="https://www.go2live.cn/category/dev" title="w3cschool,HTML,CSS,PHP,DOM,JavaScript,jQuery,XML,AJAX,ASP.NET,W3C,MySQL,SQL,jquery mobile,bootstrap,Python,jquery easyui,jquery ui,angularjs::::演道网的w3cschool,HTML,CSS,PHP,DOM,JavaScript,jQuery,XML,AJAX,ASP.NET,W3C,MySQL,SQL,jquery mobile,bootstrap,Python,jquery easyui,jquery ui,angularjs等技术都在这里。">产品研发</a> </li> <li class="cat-item cat-item-73"><a href="https://www.go2live.cn/category/prd" title="互联网产品、设计、运营案例分析,方法论指导::::::演道网互联网产品设计专栏提供网上优秀的产品运营设计相关的知识和文章。">产品设计</a> </li> <li class="cat-item cat-item-104"><a href="https://www.go2live.cn/category/prd/product" >产品需求</a> </li> <li class="cat-item cat-item-23"><a href="https://www.go2live.cn/category/dev/%e5%85%b6%e5%ae%83" >其它</a> </li> <li class="cat-item cat-item-277"><a href="https://www.go2live.cn/category/reference" >参考手册</a> </li> <li class="cat-item cat-item-276"><a href="https://www.go2live.cn/category/%e5%bf%83%e7%81%b5%e5%b0%8f%e6%86%a9" title="心灵小憩">心灵小憩</a> </li> <li class="cat-item cat-item-84"><a href="https://www.go2live.cn/category/dev/db" title="数据库入门与提高::::::演道网数据库专栏提供一线数据库研发人员在学习工作中的经验,减少大家走的弯路,大量源码可以直接使用。">数据库</a> </li> <li class="cat-item cat-item-1"><a href="https://www.go2live.cn/category/nocate" >未分类</a> </li> <li class="cat-item cat-item-3"><a href="https://www.go2live.cn/category/life" >生活随感</a> </li> <li class="cat-item cat-item-266"><a href="https://www.go2live.cn/category/basic/algorithm" >算法</a> </li> <li class="cat-item cat-item-75"><a href="https://www.go2live.cn/category/grow" >观念更新</a> </li> <li class="cat-item cat-item-270"><a href="https://www.go2live.cn/category/practice/keng" >踩坑</a> </li> <li class="cat-item cat-item-83"><a href="https://www.go2live.cn/category/practice/devops" >运维</a> </li> <li class="cat-item cat-item-106"><a href="https://www.go2live.cn/category/prd/market" >运营推广</a> </li> </ul> </div><div id="tag_cloud-12" class="widget widget_tag_cloud"><h3 class="widget-title"><span>标签</span></h3><div class="tagcloud"><a href="https://www.go2live.cn/tag/android" class="tag-cloud-link tag-link-39 tag-link-position-1" style="font-size: 18.980392156863pt;" aria-label="Android (47 items)">Android</a> <a href="https://www.go2live.cn/tag/android%e5%bc%80%e5%8f%91%e6%8a%80%e6%9c%af%e5%91%a8%e6%8a%a5" class="tag-cloud-link tag-link-258 tag-link-position-2" style="font-size: 14.862745098039pt;" aria-label="Android开发技术周报 (16 items)">Android开发技术周报</a> <a href="https://www.go2live.cn/tag/angularjs" class="tag-cloud-link tag-link-119 tag-link-position-3" style="font-size: 12.300653594771pt;" aria-label="AngularJS (8 items)">AngularJS</a> <a href="https://www.go2live.cn/tag/django" class="tag-cloud-link tag-link-134 tag-link-position-4" style="font-size: 16.052287581699pt;" aria-label="django (22 items)">django</a> <a href="https://www.go2live.cn/tag/flask" class="tag-cloud-link tag-link-259 tag-link-position-5" style="font-size: 8pt;" aria-label="flask (2 items)">flask</a> <a href="https://www.go2live.cn/tag/http" class="tag-cloud-link tag-link-45 tag-link-position-6" style="font-size: 17.516339869281pt;" aria-label="http (32 items)">http</a> <a href="https://www.go2live.cn/tag/jquery" class="tag-cloud-link tag-link-121 tag-link-position-7" style="font-size: 10.013071895425pt;" aria-label="jQuery (4 items)">jQuery</a> <a href="https://www.go2live.cn/tag/nginx" class="tag-cloud-link tag-link-77 tag-link-position-8" style="font-size: 11.843137254902pt;" aria-label="nginx (7 items)">nginx</a> <a href="https://www.go2live.cn/tag/nodejs" class="tag-cloud-link tag-link-120 tag-link-position-9" style="font-size: 13.490196078431pt;" aria-label="NodeJS (11 items)">NodeJS</a> <a href="https://www.go2live.cn/tag/securecrt" class="tag-cloud-link tag-link-103 tag-link-position-10" style="font-size: 19.895424836601pt;" aria-label="securecrt (59 items)">securecrt</a> <a href="https://www.go2live.cn/tag/shell" class="tag-cloud-link tag-link-71 tag-link-position-11" style="font-size: 18.522875816993pt;" aria-label="shell (42 items)">shell</a> <a href="https://www.go2live.cn/tag/view" class="tag-cloud-link tag-link-29 tag-link-position-12" style="font-size: 12.758169934641pt;" aria-label="View (9 items)">View</a> <a href="https://www.go2live.cn/tag/vim" class="tag-cloud-link tag-link-61 tag-link-position-13" style="font-size: 18.248366013072pt;" aria-label="vim (39 items)">vim</a> <a href="https://www.go2live.cn/tag/wordpress%e4%bc%98%e5%8c%96" class="tag-cloud-link tag-link-109 tag-link-position-14" style="font-size: 10.745098039216pt;" aria-label="wordpress优化 (5 items)">wordpress优化</a> <a href="https://www.go2live.cn/tag/%e4%bb%a3%e7%a0%81%e7%a4%ba%e8%8c%83" class="tag-cloud-link tag-link-43 tag-link-position-15" style="font-size: 17.241830065359pt;" aria-label="代码示范 (30 items)">代码示范</a> <a href="https://www.go2live.cn/tag/%e5%89%8d%e7%ab%af%e5%bc%80%e5%8f%91" class="tag-cloud-link tag-link-118 tag-link-position-16" style="font-size: 15.503267973856pt;" aria-label="前端开发 (19 items)">前端开发</a> <a href="https://www.go2live.cn/tag/%e5%8e%9f%e5%88%9b" class="tag-cloud-link tag-link-12 tag-link-position-17" style="font-size: 21.542483660131pt;" aria-label="原创 (91 items)">原创</a> <a href="https://www.go2live.cn/tag/%e5%9f%ba%e7%a1%80%e6%a6%82%e5%bf%b5" class="tag-cloud-link tag-link-30 tag-link-position-18" style="font-size: 16.235294117647pt;" aria-label="基础概念 (23 items)">基础概念</a> <a href="https://www.go2live.cn/tag/%e5%a4%9a%e7%ba%bf%e7%a8%8b" class="tag-cloud-link tag-link-49 tag-link-position-19" style="font-size: 10.013071895425pt;" aria-label="多线程 (4 items)">多线程</a> <a href="https://www.go2live.cn/tag/%e5%ad%a6%e4%bc%9a%e6%8f%90%e9%97%ae" class="tag-cloud-link tag-link-129 tag-link-position-20" style="font-size: 15.137254901961pt;" aria-label="学会提问 (17 items)">学会提问</a> <a href="https://www.go2live.cn/tag/%e5%b7%a5%e5%85%b7" class="tag-cloud-link tag-link-28 tag-link-position-21" style="font-size: 9.0980392156863pt;" aria-label="工具 (3 items)">工具</a> <a href="https://www.go2live.cn/tag/%e5%b7%a5%e5%85%b7%e5%ad%a6%e4%b9%a0" class="tag-cloud-link tag-link-17 tag-link-position-22" style="font-size: 10.745098039216pt;" aria-label="工具学习 (5 items)">工具学习</a> <a href="https://www.go2live.cn/tag/%e5%b7%a5%e7%a8%8b%e5%b8%88%e6%97%a5%e5%b8%b8" class="tag-cloud-link tag-link-218 tag-link-position-23" style="font-size: 18.614379084967pt;" aria-label="工程师日常 (43 items)">工程师日常</a> <a href="https://www.go2live.cn/tag/%e5%bc%80%e5%8f%91%e8%80%85%e5%a4%b4%e6%9d%a1" class="tag-cloud-link tag-link-170 tag-link-position-24" style="font-size: 22pt;" aria-label="开发者头条 (102 items)">开发者头条</a> <a href="https://www.go2live.cn/tag/%e5%be%ae%e4%bf%a1%e5%b0%8f%e7%a8%8b%e5%ba%8f" class="tag-cloud-link tag-link-116 tag-link-position-25" style="font-size: 14.588235294118pt;" aria-label="微信小程序 (15 items)">微信小程序</a> <a href="https://www.go2live.cn/tag/%e5%be%ae%e4%bf%a1%e5%ba%94%e7%94%a8%e5%8f%b7" class="tag-cloud-link tag-link-117 tag-link-position-26" style="font-size: 14.40522875817pt;" aria-label="微信应用号 (14 items)">微信应用号</a> <a href="https://www.go2live.cn/tag/%e5%bf%83%e6%99%ba" class="tag-cloud-link tag-link-35 tag-link-position-27" style="font-size: 12.758169934641pt;" aria-label="心智 (9 items)">心智</a> <a href="https://www.go2live.cn/tag/%e6%8a%80%e6%9c%af%e6%9e%b6%e6%9e%84" class="tag-cloud-link tag-link-127 tag-link-position-28" style="font-size: 16.967320261438pt;" aria-label="技术架构 (28 items)">技术架构</a> <a href="https://www.go2live.cn/tag/%e6%8e%a8%e8%8d%90" class="tag-cloud-link tag-link-32 tag-link-position-29" style="font-size: 8pt;" aria-label="推荐 (2 items)">推荐</a> <a href="https://www.go2live.cn/tag/%e6%95%88%e7%8e%87" class="tag-cloud-link tag-link-37 tag-link-position-30" style="font-size: 11.385620915033pt;" aria-label="效率 (6 items)">效率</a> <a href="https://www.go2live.cn/tag/%e6%a0%b8%e5%bf%83%e6%a6%82%e5%bf%b5" class="tag-cloud-link tag-link-34 tag-link-position-31" style="font-size: 10.013071895425pt;" aria-label="核心概念 (4 items)">核心概念</a> <a href="https://www.go2live.cn/tag/%e6%ba%90%e7%a0%81%e5%88%86%e6%9e%90" class="tag-cloud-link tag-link-33 tag-link-position-32" style="font-size: 10.745098039216pt;" aria-label="源码分析 (5 items)">源码分析</a> <a href="https://www.go2live.cn/tag/%e7%9f%a5%e8%af%86%e6%80%bb%e7%bb%93" class="tag-cloud-link tag-link-97 tag-link-position-33" style="font-size: 9.0980392156863pt;" aria-label="知识总结 (3 items)">知识总结</a> <a href="https://www.go2live.cn/tag/%e7%a0%81%e5%86%9c%e5%91%a8%e5%88%8a" class="tag-cloud-link tag-link-257 tag-link-position-34" style="font-size: 15.320261437908pt;" aria-label="码农周刊 (18 items)">码农周刊</a> <a href="https://www.go2live.cn/tag/%e7%a7%af%e7%b4%af" class="tag-cloud-link tag-link-25 tag-link-position-35" style="font-size: 10.745098039216pt;" aria-label="积累 (5 items)">积累</a> <a href="https://www.go2live.cn/tag/%e7%ae%97%e6%b3%95" class="tag-cloud-link tag-link-69 tag-link-position-36" style="font-size: 13.124183006536pt;" aria-label="算法 (10 items)">算法</a> <a href="https://www.go2live.cn/tag/%e7%ba%bf%e7%a8%8b" class="tag-cloud-link tag-link-51 tag-link-position-37" style="font-size: 16.692810457516pt;" aria-label="线程 (26 items)">线程</a> <a href="https://www.go2live.cn/tag/%e7%bf%bb%e8%af%91" class="tag-cloud-link tag-link-31 tag-link-position-38" style="font-size: 9.0980392156863pt;" aria-label="翻译 (3 items)">翻译</a> <a href="https://www.go2live.cn/tag/%e8%a7%82%e7%82%b9" class="tag-cloud-link tag-link-59 tag-link-position-39" style="font-size: 9.0980392156863pt;" aria-label="观点 (3 items)">观点</a> <a href="https://www.go2live.cn/tag/%e8%ae%a8%e8%ae%ba" class="tag-cloud-link tag-link-46 tag-link-position-40" style="font-size: 14.130718954248pt;" aria-label="讨论 (13 items)">讨论</a> <a href="https://www.go2live.cn/tag/%e8%af%bb%e4%b9%a6%e7%ac%94%e8%ae%b0" class="tag-cloud-link tag-link-36 tag-link-position-41" style="font-size: 12.300653594771pt;" aria-label="读书笔记 (8 items)">读书笔记</a> <a href="https://www.go2live.cn/tag/%e8%bd%ac%e8%bd%bd" class="tag-cloud-link tag-link-14 tag-link-position-42" style="font-size: 14.588235294118pt;" aria-label="转载 (15 items)">转载</a> <a href="https://www.go2live.cn/tag/%e8%bf%90%e7%bb%b4" class="tag-cloud-link tag-link-18 tag-link-position-43" style="font-size: 11.843137254902pt;" aria-label="运维 (7 items)">运维</a> <a href="https://www.go2live.cn/tag/%e9%9d%a2%e8%af%95" class="tag-cloud-link tag-link-38 tag-link-position-44" style="font-size: 18.980392156863pt;" aria-label="面试 (47 items)">面试</a> <a href="https://www.go2live.cn/tag/%e9%b8%a1%e6%b1%a4%e6%96%87" class="tag-cloud-link tag-link-94 tag-link-position-45" style="font-size: 10.013071895425pt;" aria-label="鸡汤文 (4 items)">鸡汤文</a></div> </div><div id="recent-comments-4" class="widget widget_recent_comments"><h3 class="widget-title"><span>近期评论</span></h3><ul id="recentcomments"><li class="recentcomments"><span class="comment-author-link"><a href='https://personalloans2.com/' rel='external nofollow' class='url'>Spotloan</a></span>发表在《<a href="https://www.go2live.cn/basic/linux/linux-useradd%e5%91%bd%e4%bb%a4%e6%b7%bb%e5%8a%a0%e6%96%b0%e7%94%a8%e6%88%b7%e5%9b%be%e6%96%87%e8%af%a6%e8%a7%a3-%e6%bc%94%e9%81%93%e7%bd%91.html/comment-page-7#comment-100220">Linux useradd命令添加新用户图文详解-演道网</a>》</li><li class="recentcomments"><span class="comment-author-link"><a href='https://paydayloans3.com/' rel='external nofollow' class='url'>Speedycash</a></span>发表在《<a href="https://www.go2live.cn/basic/linux/linux-useradd%e5%91%bd%e4%bb%a4%e6%b7%bb%e5%8a%a0%e6%96%b0%e7%94%a8%e6%88%b7%e5%9b%be%e6%96%87%e8%af%a6%e8%a7%a3-%e6%bc%94%e9%81%93%e7%bd%91.html/comment-page-7#comment-100219">Linux useradd命令添加新用户图文详解-演道网</a>》</li><li class="recentcomments"><span class="comment-author-link"><a href='http://viagra200.com/' rel='external nofollow' class='url'>JudyDak</a></span>发表在《<a href="https://www.go2live.cn/basic/linux/linux-useradd%e5%91%bd%e4%bb%a4%e6%b7%bb%e5%8a%a0%e6%96%b0%e7%94%a8%e6%88%b7%e5%9b%be%e6%96%87%e8%af%a6%e8%a7%a3-%e6%bc%94%e9%81%93%e7%bd%91.html/comment-page-7#comment-100218">Linux useradd命令添加新用户图文详解-演道网</a>》</li><li class="recentcomments"><span class="comment-author-link"><a href='https://nolvadex10.com/' rel='external nofollow' class='url'>SamDak</a></span>发表在《<a href="https://www.go2live.cn/basic/linux/linux-useradd%e5%91%bd%e4%bb%a4%e6%b7%bb%e5%8a%a0%e6%96%b0%e7%94%a8%e6%88%b7%e5%9b%be%e6%96%87%e8%af%a6%e8%a7%a3-%e6%bc%94%e9%81%93%e7%bd%91.html/comment-page-7#comment-100217">Linux useradd命令添加新用户图文详解-演道网</a>》</li><li class="recentcomments"><span class="comment-author-link"><a href='http://hydrochlorothiazide125.com/' rel='external nofollow' class='url'>AlanDak</a></span>发表在《<a href="https://www.go2live.cn/basic/linux/linux-useradd%e5%91%bd%e4%bb%a4%e6%b7%bb%e5%8a%a0%e6%96%b0%e7%94%a8%e6%88%b7%e5%9b%be%e6%96%87%e8%af%a6%e8%a7%a3-%e6%bc%94%e9%81%93%e7%bd%91.html/comment-page-7#comment-100216">Linux useradd命令添加新用户图文详解-演道网</a>》</li></ul></div> </div> </div><!--sidebars--> </aside> <!-- End Sidebar --> </div> </div> <footer id="site-footer" role="contentinfo"> <!--start copyrights--> <div class="copyrights"> <div class="container"> <div class="row" id="copyright-note"> <span> © 2024 演道网 <span class="footer-info-right"> <a href="https://beian.miit.gov.cn/" target="_blank"> 京ICP备16029834号-1 </a> </span> <div class="top"> <a href="#top" class="toplink">Back to Top ↑</a> </div> </div> </div> </div> <!--end copyrights--> </footer><!-- #site-footer --> <script type='text/javascript' src='https://cdn.jsdelivr.net/wp/wp-editormd/tags/9.9.9/assets/Emojify.js/js/emojify.min.js?ver=9.9.9'></script> <script type='text/javascript' src='https://cdn.jsdelivr.net/wp/wp-editormd/tags/9.9.9/assets/ClipBoard/clipboard.min.js?ver=2.0.1'></script> <script type='text/javascript' src='https://cdn.jsdelivr.net/wp/wp-editormd/tags/9.9.9/assets/Prism.js/components/prism-core.min.js?ver=1.15.0'></script> <script type='text/javascript' src='https://cdn.jsdelivr.net/wp/wp-editormd/tags/9.9.9/assets/Prism.js/plugins/autoloader/prism-autoloader.min.js?ver=1.15.0'></script> <script type='text/javascript' src='https://cdn.jsdelivr.net/wp/wp-editormd/tags/9.9.9/assets/Prism.js/plugins/toolbar/prism-toolbar.min.js?ver=1.15.0'></script> <script type='text/javascript' src='https://cdn.jsdelivr.net/wp/wp-editormd/tags/9.9.9/assets/Prism.js/plugins/show-language/prism-show-language.min.js?ver=1.15.0'></script> <script type='text/javascript' src='https://cdn.jsdelivr.net/wp/wp-editormd/tags/9.9.9/assets/Prism.js/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js?ver=1.15.0'></script> <script type='text/javascript' src='https://cdn.jsdelivr.net/wp/wp-editormd/tags/9.9.9/assets/Turndown/turndown.js?ver=5.0.1'></script> <script type='text/javascript' src='https://www.go2live.cn/wp-content/themes/feather-magazine/js/customscripts.js?ver=4.9.8'></script> <script type='text/javascript' src='https://www.go2live.cn/wp-includes/js/wp-embed.min.js?ver=4.9.8'></script> <script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=default&ver=1.3.10'></script> <script type="text/javascript"> window.onload = function () { emojify.setConfig({ img_dir: "https://cdn.jsdelivr.net/wp/wp-editormd/tags/9.9.9/assets/Emojify.js/images/basic",//前端emoji资源地址 blacklist: { 'ids': [], 'classes': ['no-emojify'], 'elements': ['^script$', '^textarea$', '^pre$', '^code$'] } }); emojify.run(); } </script> <script type="text/javascript"> Prism.plugins.autoloader.languages_path = "https://cdn.jsdelivr.net/wp/wp-editormd/tags/9.9.9/assets/Prism.js/components/"; </script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?7c0353d5197094ff9721e67666d9b6b4"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>