前端裏的持續集成

什麼是持續集成,什麼是統一代碼倉庫,前端工程化,自動化構建


持續集成

持續集成需求

  1. 持續集成式通過平臺串聯各個開發環節,實現和沉澱工作自動化的方法;
  2. 線上代碼和代碼倉庫不同步,影響迭代和團隊協作;
  3. 靜態資源發佈依賴人工,浪費開發人力;
  4. 缺少自動化測試, 產品質量得不到保障;
  5. 文件簡單修改上線,需要技術介入
  6. 這裏寫圖片描述

持續集成解決

  1. 統一代碼廠庫通過分支管理合並主幹svn / git;
  2. 自動化構建工具,編譯,部署,測試,監控,本機開發上線環境;(可以移步我的QA工程師篇博客)
  3. 持續集成平臺. :jenKins, Trevis CI
  4. 部署工具:rsync , shelljs 可以幫助自己寫shell, yargs 可以拿到 - 命令行後面的參數 -v
  5. 運營同學有權限操作運營頁面保存即可上線;

統一代碼倉庫多開分支

svn 開發階段圖示;
這裏寫圖片描述

同事z: 從主幹A上面拿取分支 A-01;
同事x: 從主幹A上面拿取分支 A-02;
同事z: A-01幹好活了, 把代碼上傳到Trunk上 此時A更新成了B;
同事x: 此時A-02也幹好活了,把更新的B默認拉去過來,合併代碼, 然後把代碼送到新的主幹上去; B更新成了C;
C-back 留下tags 方便回滾

前端工程化

1.自動化編譯

這裏寫圖片描述

2.前端模塊化

```
// CMD 同步
/**
 * require, 去加載別的模塊
 * exports, 導出模塊
 * module , 就是把很多東西一起導出
 */
define(function (require, exports, module) {
    var a = require('./a')
    a.doSomething()
// 此處略去 100 行
    var b = require('./b')
// 依賴可以就近書寫
    b.doSomething()
})
```


```
// AMD 默認推薦的是 異步
define(['./a', './b'], function (a, b) {
    // 依賴必須一開始就寫好
    a.doSomething()
// 此處略去 100 行
    b.doSomething()
})

```


```
//RequireJS.js
require(['math'],function (math) {
    math.add(2,3)
})
```

3.定位靜態資源;

 1. 有時候瀏覽器緩存,需要我本地自動清楚緩存;
```
//以前,我們是這樣做的.我們的邏輯js文件 每次都不一樣;
<script src="7.js" v="1.0.0"></script>
``` 
 2. 現在呢.加了MD5版本戳,代替了
 3. 這裏延伸一個問題?有些公司發佈一定要是半夜才能發佈.那麼可不可做到隨時發佈呢? 
 4. 配置超長時間的本地緩存---節省帶寬,提高性能
 5. 採用內容摘要作爲緩存更新依據 ---精準的緩存控制
 6. 靜態資源cdn部署----優化網絡請求
 7. 更新資源發佈路徑實現非覆蓋發佈---平滑升級

4.前端開發組建化;

 `Web Components `
 1. Custom Elements
    ```
    class ButtonHelloElement extends HTMLButtonElement{
        constructor(){
            super()
            this.addEventListener('click',()=>{
                alert("hello world")
            })
        }
    }
    customElements.define("button-hello",ButtonHelloElement,{extends:"button"})
    //<button-hello> chenjing </button-hello>
    ```


 2. HTML Imports
    是在一種HTMLs中引用以及複用其他HTML文檔的方式, 可以理解爲 我們常見的模板中的 include之類的作用
    ```
    //header.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div class="logo">
    我是header頁面
</div>
</body>
</html>
    ```
    ```
    <meta charset="UTF-8">
    <link rel="import" href="./header.html">
    <script>
        const link = document.querySelector('link[rel=import]');
        const header = link.import;
        const pulse = header.querySelector('div.logo')
        const d = document.currentScript.ownerDocument;
        console.log(link)
        console.log(header)
        console.log(pulse)
        console.log(d)
    </script>

    ```
 3. HTML Templates
 4. Shadow DOM 沙箱環境
      用來隔離組建代碼的作用域, 列如我組建的css 不影響其他組建之類的,  而iframe 又太重會出現很多奇怪的問題, 旨在提供一種更好的組織頁面的方式,避免代碼互相影響;沙箱裏面的css 寫法也不太一樣;

    ```
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Shadow DOM</title>
    </head>
    <body>
    <div class="host">Hello World!</div>
    <script>
        var host = document.querySelector('.host');
        var root = host.createShadowRoot();

        var node = document.createElement('h1');
        node.textContent = 'Shadow DOM 介紹';

        var para = document.createElement('p');
        para.textContent = 'Shadow DOM 詳細信息';

        root.appendChild(node);
        root.appendChild(para);
    </script>
    </body>
    </html>
    ```

5.自動化部署測試配合版本庫;

 Jenkins  Travis CI

6.自動化 性能優化

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章