詳解webpack+es6+angular1.x項(xiàng)目構(gòu)建
技術(shù)棧概述
ES2015(ES6)
大名ES2015,顧名思義是 ECMAScript 在2015年6月正式發(fā)布的一套標(biāo)準(zhǔn)。小名ES6,意為ECMAScript第六次變更。(JavaScript 是 ECMAScript 規(guī)范的一種實(shí)現(xiàn))。如今已慢慢替代ES5,成為JS主流的開(kāi)發(fā)規(guī)范,新增很多語(yǔ)法糖,大大提高開(kāi)發(fā)效率。
webpack
一款模塊化的構(gòu)建工具,對(duì)ES6的構(gòu)建更加友好,不詳細(xì)介紹了。
angular
一款MV*框架,本次用的是angular的1.6.4版本,即angular1.x版本中的最高版,也可以看作是2的過(guò)渡版吧。
eslint
ESLint是一個(gè)QA工具,用來(lái)避免低級(jí)錯(cuò)誤和統(tǒng)一代碼的風(fēng)格。尤其是多人開(kāi)發(fā)的情境下,規(guī)范代碼,統(tǒng)一風(fēng)格是非常重要的。即便每個(gè)人負(fù)責(zé)自己的模塊,在實(shí)際執(zhí)行的時(shí)候也難免有交集。eslint簡(jiǎn)單的講,就是讓自己少犯錯(cuò),也讓隊(duì)友更容易的看懂你的代碼。
本項(xiàng)目,選擇的是ESlint的推薦配置,唯一注意的是全局變量中把a(bǔ)ngular的關(guān)鍵詞加上。因?yàn)橛玫搅薳s7的async等東西,除了webpack里babel的配置要到位,eslint里面也要配置相關(guān)解析,即:
module.exports = { "env": { "browser": true, "commonjs": true, "es6": true }, "extends": "eslint:recommended", "parserOptions": { "sourceType": "module" }, "globals": { "angular": true// angular關(guān)鍵詞 }, "parser": "babel-eslint", // 解析es7 "rules": { "no-console": 0, "quotes": [ "error", "single" ] } };
eslint是很靈活的,可以自己按需配置,本項(xiàng)目都是用的官方推薦配置。
項(xiàng)目結(jié)構(gòu)
commonComponents
公共組件目錄,放一些二次封裝的table等等'片段式'的html。
components
頁(yè)面組件目錄,因?yàn)槭菃雾?yè)面應(yīng)用,這里面放置的也就是各個(gè)頁(yè)面了,把每個(gè)頁(yè)面封裝成'大'組件,里面由各自的html和'小'組件拼接而成。
config
路由,URL等等可配置的管理目錄。
css
項(xiàng)目的公用樣式目錄。具體到組件的樣式,會(huì)在各個(gè)組件里面具體寫(xiě)。比如login組件。
image
圖片目錄。所有圖片統(tǒng)一在這里管理。
server
服務(wù)目錄。對(duì)項(xiàng)目的一些公用服務(wù)進(jìn)行封裝,比如二次封裝http服務(wù)。這個(gè)目錄,還可以細(xì)分,比如將angular的provider,service,value等等再進(jìn)行劃分。
項(xiàng)目入口
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,因?yàn)樵穆酚?,不支持視圖的嵌套。components, services, commonComponents是各自組建服務(wù)的匯總,前面已介紹。
寫(xiě)一個(gè)頁(yè)面組件
下面以登陸頁(yè)面為例。一個(gè)組件頁(yè)面由4個(gè)文件組成,分別是index.js(此頁(yè)面組件的出口,也是其余邏輯,樣式的入口)
import loginCtrl from './login' import tem from './login.html'; export default angular.module('login', []) .component('login', { template: tem, controller: loginCtrl }) .name;
login.js(頁(yè)面的業(yè)務(wù)邏輯在這里)
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;
這個(gè)類(lèi)主要完成的業(yè)務(wù)就是發(fā)送一個(gè)登陸http請(qǐng)求,這里的http是二次封裝的一個(gè)服務(wù),與注入原生依賴(lài)無(wú)異,有兩種注入方式,一種是上邊的在class中調(diào)用靜態(tài)方法。即static $inject = ['http'];
另一種是loginCtrl.$inject = ['http'];(class不存在變量提升,確保寫(xiě)在class定義之后)
login.less(跟次登陸頁(yè)面相關(guān)的樣式,不貼代碼了)。這樣就寫(xiě)好了一個(gè)頁(yè)面組件,由index.js輸出出去,輸出到哪里呢?
統(tǒng)一管理頁(yè)面組件
在剛剛components目錄下寫(xiě)好的login頁(yè)面組件目錄的同級(jí),建立一個(gè)index.js,作用是用來(lái)統(tǒng)一管理組件頁(yè)面。即:
import login from './login'; import register from './register'; export default angular.module('components', [ login, register ]).name;
然后再將這個(gè)頁(yè)面輸出到最開(kāi)始的app.js。即,app.js中引入的components。其他同理,將服務(wù),過(guò)濾器等等都統(tǒng)一以相關(guān)文件管理匯總起來(lái),再由入口文件引入。
類(lèi)似于一種樹(shù)形的結(jié)構(gòu):
以上,就簡(jiǎn)單的構(gòu)建好了一個(gè)webpack+es6+angular1.x的項(xiàng)目。
項(xiàng)目地址參考:https://github.com/jiwenjiang/angularSeed
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ES6中Array.find()和findIndex()函數(shù)的用法詳解
- JavaScript學(xué)習(xí)筆記之ES6數(shù)組方法
- JavaScript ES6中export、import與export default的用法和區(qū)別
- 詳解JavaScript ES6中的模板字符串
- JavaScript中ES6 Babel正確安裝過(guò)程
- ES6中Array.includes()函數(shù)的用法
- JavaScript ES6中CLASS的使用詳解
- js實(shí)現(xiàn)把時(shí)間戳轉(zhuǎn)換為yyyy-MM-dd hh:mm 格式(es6語(yǔ)法)
- 詳解ES6之a(chǎn)sync+await 同步/異步方案
- ES5 ES6中Array對(duì)象去除重復(fù)項(xiàng)的方法總結(jié)
- 跟我學(xué)習(xí)javascript的最新標(biāo)準(zhǔn)ES6
- 深入理解React中es6創(chuàng)建組件this的方法
- 詳解webpack 配合babel 將es6轉(zhuǎn)成es5 超簡(jiǎn)單實(shí)例
- 讓nodeJS支持ES6的詞法----babel的安裝和使用方法
- JS實(shí)現(xiàn)禁止高頻率連續(xù)點(diǎn)擊的方法【基于ES6語(yǔ)法】
- 手把手教你搭建ES6的開(kāi)發(fā)運(yùn)行環(huán)境
- ES6新特性之模塊Module用法詳解
- JavaScript ES6常用基礎(chǔ)知識(shí)總結(jié)
相關(guān)文章
angular ng-model 無(wú)法獲取值的處理方法
今天小編就為大家分享一篇angular ng-model 無(wú)法獲取值的處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10詳解Angularjs 自定義指令中的數(shù)據(jù)綁定
這篇文章主要介紹了Angularjs 自定義指令中的數(shù)據(jù)綁定,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07angular中兩種表單的區(qū)別(響應(yīng)式和模板驅(qū)動(dòng)表單)
這篇文章主要介紹了angular中兩種表單的區(qū)別(響應(yīng)式和模板驅(qū)動(dòng)表單),詳細(xì)的介紹了這兩種表單的實(shí)現(xiàn)以及區(qū)別,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-12-12詳解利用Angular實(shí)現(xiàn)多團(tuán)隊(duì)模塊化SPA開(kāi)發(fā)框架
本篇文章主要介紹了詳解利用Angular實(shí)現(xiàn)多團(tuán)隊(duì)模塊化SPA開(kāi)發(fā)框架,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11Angular2關(guān)于@angular/cli默認(rèn)端口號(hào)配置的問(wèn)題
本篇文章主要介紹了Angular2關(guān)于@angular/cli默認(rèn)端口號(hào)配置的問(wèn)題,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-07-07angularjs使用directive實(shí)現(xiàn)分頁(yè)組件的示例
本篇文章主要介紹了angularjs使用directive實(shí)現(xiàn)分頁(yè)組件的示例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-02-02AngularJS使用angular-formly進(jìn)行表單驗(yàn)證
這篇文章主要介紹了AngularJS使用angular-formly進(jìn)行表單驗(yàn)證的相關(guān)資料,需要的朋友可以參考下2015-12-12