【React UI工程化】持续集成及项目搭建总结

什么是工程化

工程化.png
  • 如果团队比比较扁平,推荐使用git,团队层级比较明显,推荐svn;

测试覆盖率

覆盖率.png
1、步骤(添加内容可看github)

①在jest.config.js中添加五句话;
②安装jest-junit依赖;
③package.json的scripts里添加一句命令:cross-env NODE_ENV=test JEST_JUNIT_OUTPUT=./test-results/jest/results.xml jest --config=jest.config.js,暂时命名为“xxx”;
yarn xxx,会生成一个coverage目录,具体操作看下图,打开index.html就可看到各个文件的代码测试覆盖率;

coverage.png

  • 要先创建一个test-results目录,再yarn xxxJEST_JUNIT_OUTPUT=./test-results/jest/results.xml下面的文件才会生成(这个目录主要是给CI看的,开发者不用看,所以这个目录要ignore);

持续集成

目前比较流行的工具

  • 有免费的有收费的,区别是:操作是否友好、性能是否够用;工具列表
  • 免费的:
    Circle CI (本次代码选用这个,用github登录)
    Travis CI
  • 收费的:
    Code Climate(这个功能比较强大)

配置 Circle CI

1、自动测试

①以github注册Circle CI,在注册前我们可以先把本次CI的配置文件(.circleci目录下的config.yml文件,文件里面的配置copy即可)先加入并提交;
②注册完成后,根据步骤选择仓库,然后开始Start building;这时就开始按照你config.yml配置的步骤开始工作了;
③这里需要注意的点:config.yml文件中的node版本是否正确;反正就是根据fail提示来见招拆招;

ci.png

2、自动打包
自动打包的配置在config.yml文件里的build配置里
  • 我们写的是一个UI库,所以要在入口文件中把这个UI单元文件导出去;最直观的写法是(引入后再导出去):
import Icon from './icon/icon';
export {Icon};

但是上面的写法可以变成下面的一句话:

export {default as Icon} from './icon/icon';

具体的知识点可阅读export {default as} from 【深入解读】

  • package.json中添加一句"files": ["/dist/**/*"](注意不要写成"files": ["/dist/"]
3、自动发布
下面的步骤只是在手动发布啦
  • 在提交正式库之前,package.json中的name不要写得太简单,防止别人搜到直接下载下来,到正式发布时再改名字;version要弱版本0.01;


    image.png
  • npm publish
    报错401是未登录npm,npm adduser输入账号密码即可;
    报错403是提交的版本号重复了,改一下版本号即可;
  • 注意!!!npm adduser时npm源要切回npm官方源,否则会报错!!!npm publish后可再切回淘宝源;(具体步骤可参照darkTi UI的第二节笔记)
    image.png

这时我们已经把包发布到npm了,用户可以通过npm install dui666来安装我们的库了!!!

下面让我们开始不用npm publish就可以自动发布的配置吧~~
  • config.yml文件里配置publish操作;此时还需要npm的登录,npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN中$NPM_TOKEN是什么呢?
    ①去npm官网生成一个access token;
    ②把这个access token添加到Circle CI对应项目里,projects -> 对应项目 -> Project Settings -> Environment Variables,添加进去就好啦~~~
    ③这时你的CI就可以获取到你的npm账号权限并把打好的包发布到npm上啦
  • 自动修改package.json里的版本号,npm version [major/minor/patch]
major.minor.patch --> (大版本/小版本/补丁版本)
patch:16.8.2 -> 16.8.3   API不变,修复了bug
minor:16.8.2 -> 16.9.0  API有变化,但变化不大,不影响现有代码
major:16.8.2  -> 17.0.0 API变化很大,影响现有代码
  • 想要自动修改完版本号后就能自动push,写一个deploy.sh脚本(具体写法看github);
    ①运行sh ./deploy.sh major/minor/patch即可,注意,命令是需要跟一个参数(major/minor/patch)的,指定你要修改哪个层级版本号;
    ②至此你的代码就可以完成自动修改版本号并push、自动测试、自动打包、自动发布这一系列步骤啦!!!!
4、发布特定分支的代码
  • 因为你不可能随便push一下就发布到npm啊,所以我们对发布的时候做一个限制,只对一个分支上的代码进行发布;
  • 所以我们需要修改config.yml文件里的publish操作
- publish:
          requires:
            - build
          filters:
            branches:
              only: /deploy/
  • 创建deploy分支,git checkout deploy 在deploy分支运行sh ./deploy.sh major/minor/patch即可;这样,你只有切到deploy分支后运行sh ./deploy.sh major/minor/patch才会进行CI中这一系列操作(即才会上传至npm)~~~~

添加小徽标

https://shields.io/

JS、JSX、TS、TSX的区别

  • 先说X,X一般在编程领域有两个意思,一是代表十,例如iphoneX;二是代表扩展extension;JSX和TSX的X的扩展都是语法的扩展,让它们可以支持标签,return <div></div>(就是XML);
  • TS相对于JS而言,只是多了类型检测
  • JSX对于JS和TSX对于TS,也都只是扩展了XML的语法;
  • 所以TSX是里面功能最强大的;我们一般都直接用TSX
  • 它们的关系如下:


    image.png

单独为CI创建一个jest.config.ci.js

  • 每次yarn test的时候都会测一遍覆盖率,其实在本地测试的时候我们不需要每次都要覆盖率,所以我们才需要单独为CI创建一个jest.config.ci.js,这样yarn test的时候就不会测试覆盖率,yarn ci的时候才会测试覆盖率(因为package.json中的命令调整了);

制作一个官网

  • example.tsx

  • yarn add react-router-dom @types/react-router-dom --dev

  • 我们的index.tsx是源代码,目的是导出组件以供用户使用,所以我们就需要自己单独建一个example.tsx文件来测试


    image.png
  • 只需要在webpack.config.dev.js添加修改如下代码,它在开发环境下可以覆盖webpack.config.js里的entry属性;这样就可以把example.tsx用作测试页面了;
    ①添加entry属性;
    ②plugins里的index.html换成example.html;

   entry: {
        example: './example.tsx'  //入口文件,example是文件名,可以改成其他的名字
    },
    plugins: [
        new HtmlWebpackPlugin({
            title: 'DUI',
            template: 'example.html'
        })
    ]
  • 安装路由,yarn add react-router-dom @types/react-router-dom --dev,自己写一个官网(也相当于是一个测试页面);

项目搭建总结

  • 我们安装了许多插件,其中比较重要的是awesome-typescript-loaderhtml-webpack-plugin(面试的时候可着重说下它两),要清楚它们是你 干什么的;
  • 高级程序员大多都是在做一些设计和限制;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容