一塊兒來作Chrome Extension《搭個架子》

CEF - A simple Chrome Extension development falsework

CEF是一個簡單的Chrome Extension開發腳手架,它有以下功能:javascript

  1. 模塊化的結構,便於開發維護
  2. 支持模板
  3. 支持簡單的數據綁定
  4. 發佈工具,可對JS文件進行壓縮,並輸出乾淨的擴展文件

目錄

1.獲取並初始化

  1. git clone https://github.com/yuiitsu/CEF.git
  2. cd CES
  3. npm install

2.項目結構

- dist // 發佈文件夾
- scripts
  - lib // 庫文件夾
    jquery.js
  - module // 模塊
    - your module
        event.js // 事件監聽
        module.js // 模塊功能
        view.js // 模板
  app.js
  model.js
  run.js
- style
deploy.js // 發佈腳本
manifest.json

注:本項目默認使用jQuery做爲dom selectorhtml

3.使用

3.1建立Module

在module文件夾裏建立Module文件夾,如:demo。接着在demo文件夾裏建立module.js,event.js和view.js,java

注:這3個文件並非必須的,根據狀況添加。好比,該模塊並不須要模板,因此view.js就能夠不要node

在module.js中添加以下代碼:jquery

App.module.extend('demo', function() {
    //
    this.init = function() {
        // todo.
    };
});

extend的第一個參數爲模塊名,若是加載了該模塊,能夠在module, event, view裏直接使用this.module.demo調用。
init方法爲初始化方法,模塊加載的時候即會執行。git

接着添加一個方法:github

App.module.extend('demo', function() {
    //
    this.init = function() {
        // todo.
    };
    
    this.hello = function() {
        console.log('Module demo hello.');
    };
});

以下調用hello方法:chrome

this.module.demo.hello();

3.2建立View

在demo文件夾下的view.js裏添加以下代碼:npm

App.view.extend('demo', function() {
    this.hello = function() {
        return `
            <div class="ces-view-example">
                <h1>CES View Example</h1>
                <div>Hi, {{ data['name'] }}</div>
            </div>
        `;
    };
});

同Module,extend第一個參數爲view名稱,hello方法返回一段html模板代碼。view對象有3個方法,分別是:json

  • getView()
  • display()
  • append()

3.2.1getView()

function getView(name, method, data) {}

它有3個參數:

  • name,view名稱
  • method, 方法名稱
  • data, 渲染數據

調用demo的hello方法:

let html = this.view.getView('demo', 'hello', {name: 'CEF'});

將會獲得:

<div class="ces-view-example">
    <h1>CES View Example</h1>
    <div>Hi, CEF</div>
</div>

3.2.2display()和append()

這兩個方法很明顯,輸出HTML到指定位置用的,參數相同

function display(name, method, data, target) {}

它們有4個參數,前3個同getView,最後的target即爲目錄對象,由於本項目使用了jQuery,因此這裏是jQuery對象
調用:

this.view.display('demo', 'hello', {name: 'CEF'}, $('#xxx'));

3.2.3模板語法

// 變量附值
{{ var v = 1; }}

// 變量輸出
{{ v }}

// 條件
{{ if v === 1 }}
// todo.
{{ else }}
// todo.
{{ end }}

// 循環
{{ var list = [1, 2] }}
{{ for var i in list }}
    {{ list[i] }}
{{ end }}

// 調用其它模板
{{ var v = this.view.getView(); }}

// 渲染模板
{{ v }}

3.3建立Event

在demo文件夾的event.js裏添加以下代碼:

App.event.extend('demo', function() {
    this.event = {
        listenExample: function() {
            // listen event
        }
    }
});

和以前同樣,只是event只有一個默認的對象,this.event,當event.js被加載的時候,系統會自動執行this.event裏的全部方法,不須要再手動執行監聽了。
在event.js裏一樣可使用this.modulethis.view來調用module或view,但建議只調用module,渲染的工做交到它。

3.4發佈

發佈腳本能夠去除項目目錄下不須要的文件夾和文件,將對js文件進行壓縮混淆。命令以下:

node deploy.js

3.4.1設置過濾

不須要發佈的文件夾或文件,不須要壓縮混淆的文件能夠在deploy.js裏配置

let excludes = {
    'copy': [
        '.gitignore',
        '.DS_Store',
        'builder.js',
        'package.json',
        'package-lock.json',
        'README.md',
        '.git',
        '.idea',
        'node_modules',
        'dist'
    ],
    'mini': [
    ]
};

其中excludes.copy爲不須要發佈的文件夾和文件,mini爲不須要壓縮混淆的文件

發佈執行完成後,文件輸出到dist文件夾,只須要將dist目錄打包,上傳Chrome Extension Store便可。

3.5加載文件

目前新增Module裏的文件須要手動添加到manifest.json或是html文件裏,後續會增長編譯自動執行。由於考慮到可能的因素過多, 配置的代理可能會很是多,因此手動添加是目前比較好的處理方式。

相關文章
相關標籤/搜索