webpack+es6+angular1.x項目構建

技術棧概述

ES2015(ES6)

大名ES2015,顧名思義是 ECMAScript 在2015年6月正式發佈的一套標準。小名ES6,意爲ECMAScript第六次變動。(JavaScript 是 ECMAScript 規範的一種實現)。現在已慢慢替代ES5,成爲JS主流的開發規範,新增不少語法糖,大大提升開發效率。css

webpack

圖片描述
一款模塊化的構建工具,對ES6的構建更加友好,不詳細介紹了。html

angular

一款MV*框架,本次用的是angular的1.6.4版本,即angular1.x版本中的最高版,也能夠看做是2的過渡版吧。webpack

eslint

ESLint是一個QA工具,用來避免低級錯誤和統一代碼的風格。尤爲是多人開發的情境下,規範代碼,統一風格是很是重要的。即使每一個人負責本身的模塊,在實際執行的時候也不免有交集。eslint簡單的講,就是讓本身少犯錯,也讓隊友更容易的看懂你的代碼。git

本項目,選擇的是ESlint的推薦配置,惟一注意的是全局變量中把angular的關鍵詞加上。由於用到了es7的async等東西,除了webpack裏babel的配置要到位,eslint裏面也要配置相關解析,即:es6

module.exports = {
  "env": {
    "browser": true,
    "commonjs": true,
    "es6": true
  },
  "extends": "eslint:recommended",
  "parserOptions": {
    "sourceType": "module"
  },
  "globals": {
    "angular": true// angular關鍵詞
  },
  "parser": "babel-eslint", // 解析es7
  "rules": {
    "no-console": 0,
    "quotes": [
      "error",
      "single"
    ]
  }
};

eslint是很靈活的,能夠本身按需配置,本項目都是用的官方推薦配置。github

項目結構

圖片描述
commonComponents
公共組件目錄,放一些二次封裝的table等等'片斷式'的html。
components
頁面組件目錄,由於是單頁面應用,這裏面放置的也就是各個頁面了,把每一個頁面封裝成'大'組件,裏面由各自的html和'小'組件拼接而成。
config
路由,URL等等可配置的管理目錄。
css
項目的公用樣式目錄。具體到組件的樣式,會在各個組件裏面具體寫。好比login組件。
圖片描述
image
圖片目錄。全部圖片統一在這裏管理。
server
服務目錄。對項目的一些公用服務進行封裝,好比二次封裝http服務。這個目錄,還能夠細分,好比將angular的provider,service,value等等再進行劃分。web

項目入口

app.js

import 'babel-polyfill';
import angular from 'angular';
import uiRouter from 'angular-ui-router';
import components from './components';
import services from './server'
import commonComponents from './commonComponents';
import appRouter from './config/app.router';
import './css/main.less';
import style from './app.less';

let appComponent = {
    restrict: 'E',
    template: require('./app.html'),
    controller: function () {
        this.class = style;
    },
    controllerAs: 'app'
};

export default angular.module('sass', [uiRouter, components, services, commonComponents])
    .config(appRouter)
    .component('app', appComponent)
    .name;

除了引入angular,還引入了ui-router,由於原生的路由,不支持視圖的嵌套。
components, services, commonComponents是各自組建服務的彙總,前面已介紹。sass

寫一個頁面組件

下面以登錄頁面爲例。一個組件頁面由4個文件組成,分別是index.js(此頁面組件的出口,也是其他邏輯,樣式的入口)babel

import loginCtrl from './login'
import tem from './login.html';

export default angular.module('login', [])
  .component('login', {
    template: tem,
    controller: loginCtrl
  })
  .name;

login.js(頁面的業務邏輯在這裏)app

import url from '../../config/system.js';

class loginCtrl {
    static $inject = ['http'];
    constructor(http) {
        [this.http, this.name] = [http, `login`];
        this.str = `str${this.name}`;
    }
    login() {
         this.http.get({userName: 'link', userPassword: '123456'}, url.login, (data) => {
               console.info("success!")
          });   
    }
}
export default loginCtrl;

這個類主要完成的業務就是發送一個登錄http請求,這裏的http是二次封裝的一個服務,與注入原生依賴無異,有兩種注入方式,一種是上邊的在class中調用靜態方法。即static $inject = ['http'];
另外一種是loginCtrl.$inject = ['http'];(class不存在變量提高,確保寫在class定義以後)

login.less(跟次登錄頁面相關的樣式,不貼代碼了)。
這樣就寫好了一個頁面組件,由index.js輸出出去,輸出到哪裏呢?

統一管理頁面組件

在剛剛components目錄下寫好的login頁面組件目錄的同級,創建一個index.js,做用是用來統一管理組件頁面。即:

import login from './login';
import register from './register';

export default angular.module('components', [
    login,
    register
]).name;

而後再將這個頁面輸出到最開始的app.js。即,app.js中引入的components。其餘同理,將服務,過濾器等等都統一以相關文件管理彙總起來,再由入口文件引入。
相似於一種樹形的結構:
圖片描述
以上,就簡單的構建好了一個webpack+es6+angular1.x的項目。

項目地址參考:https://github.com/jiwenjiang...

相關文章
相關標籤/搜索