年末了,開源一套咱們的大前端架構aotoo-hub
,小夥伴們都用得很爽的。 php
aotoo-hub
是一套正式上線的大前端解決方案。迭代的這2年多的時間,從webpack-1熬到了webpack-4,從純前端腳手架到融合node端的總體方案,從繁複到精簡,重構的次數不要太多。簡單、易用、易部署的一體化大前端開發體驗是aotoo-hub始終的追求,咱們不是在重構,就是在重構的路上(保持一致性)。html
aotoo-hub
是一套前端、node端彼此相親相愛不分離,你中有我,我中有你的大前端解決方案。前端負責靜態資源編譯與分享,node端負責服務、路由與渲染,模板則起到橋接兩端的做用(結構、樣式、渲染),最終http服務將渲染完成的模板投送到客戶端瀏覽器上。前端
完整的大前端方案須要解決前端、node兩端各自的開發、部署難的問題,而且須要將兩端融合爲一套有機的總體,同時還能兼顧到工程化實現。aotoo-hub
開發迭代的過程當中咱們始終秉持着下面這些原則vue
儘可能多的支持多種開源框架,使咱們可以爲不一樣業務選擇合適的開源框架。aotoo-hub如今支持react,vue,小程序(alpha),將來也許可以加入app的相關框架,好比RN或者FLUTTER?java
前端與node的有機融合不止是一種更好的體驗,同時前端、node端可以共享靜態資源,部署同構組件,簡化resful的路由等,一體化的設計使得項目的開發、部署、維護都變得簡單且易於維護。也許你會用到egg
,nest
等node框架做爲後端支撐,maybe更好的方案是java, go, php等的框架。node
aotoo-cli
是專門爲aotoo-hub
打造的一套命令工具,使得aotoo-hub
更容易上手了,仍是寫寫code演示一下react
啓動默認項目linux
# 安裝aotoo-cli $ npm install -g aotoo-cli # aotoo -V檢驗是否安裝成功 # 新建workspace $ aotoo init oneWorkspace #建立目錄oneWorkspace,並初始化項目環境 # 啓動默認項目 $ cd oneWorkspace $ aotoo dev
新建項目webpack
# 安裝aotoo-cli $ npm install -g aotoo-cli # aotoo -V檢驗是否安裝成功 # 新建workspace $ aotoo init oneWorkspace #建立目錄oneWorkspace,並初始化項目環境 # 新建項目 $ cd oneWorkspace $ aotoo create newProject # 建立一個項目,名稱爲newProject # 啓動項目開發版本 $ aotoo dev newProject # then open browse http://localhost:3000 # 編譯項目 $ aotoo build newProject # 靜態資源會cdn化 # 啓動生產項目 $ aotoo build newProject $ aotoo start newProject # 使用node啓動 $ pm2 start index.js -- --start newProject # 使用pm2啓動生產項目
對吧,命令行應該不算複雜。好了,這裏大概對aotoo-hub
進行了一些介紹,接着和你們說說建立項目的流程及初始化項目的文件構成
/
和\
的問題$ npm install -g node-gyp $ npm install -g node-pre-gyp
新建workspace其實就是一個準備編譯環境的過程,咱們會準備編譯文件,項目目錄,項目配置文件
# 新建命名空間 $ aotoo init wp-1
aotoo.config.js
aotoo-hub的配置文件,能夠在這裏設置項目初始目錄,版本號等等配置信息,配置內容大體以下
const path = require('path') const pakg = require('./package.json') const ROOT = __dirname const version = pakg.version module.exports = { // 版本信息,由package.json的version來指定 // 默認狀況下,全部項目產出的版本號都會依據這個version值 // 版本信息會被用於生成dist下的版本目錄 version: version, // node的環境變量NODE_ENV mode: process.env.NODE_ENV, // workspace的根目錄地址 // 會用在aotoo安裝插件時,及node端(目錄層級很深)掉用 ROOT: ROOT, // 全部項目的原始根目錄 src : path.join(__dirname, 'src'), // 配置默認項目信息 // 小程序項目必須使用這個配置 // 當咱們不使用start, name等命令選項時,aotoo-hub會查找該屬性下startup爲true的項目,並嘗試啓動 // 當咱們配置好默認項目後,命令行能夠簡化projectName apps: [ { // 項目名稱,與src項目項目目錄一致 // 任何項目都必須有本身惟一的名稱 name: 'aotooSample', // 是否啓動該項目 startup: true, // 指定項目源源目錄 src: path.join(ROOT, 'src/aotooSample'), // 默認靜態資源輸出地址爲 src/dist // 這裏能夠手動指定但願輸出的目錄 // dist // 指定項目端口地址 // 指定項目端口,可爲null,系統自動分配端口地址 port: 8400 } ] }
build目錄
包含全部的編譯文件
src目錄
src是默認aotoo-hub的源目錄,全部新建項目都會在次目錄下生成項目文件夾
aotooSmple目錄
是咱們的一個demo項目,是aotoo-hub的默認項目,以供參考
# 啓動默認項目,開發模式 $ aotoo dev
下面咱們開始新建一個項目
$ cd wp-1 $ aotoo create newProject
初始目錄是一個精簡版的項目,保留了最基礎的文件及目錄,完整目錄以下
wp-1 └── src └── newProject ├── component //組件目錄 │ └── ...... ├── ssr/sync // 同構模塊目錄 │ └── ...... ├── dist // 靜態文件輸出目錄 │ └── ...... ├── js // 前端業務js目錄 │ └── index.js ├── css // 前端業務css目錄 │ └── index.styl ├── html // 前端業務模板目錄,通常的模板都會自動生成,如須要自定義幕版,則根據同名規則自定義生成相關模板 │ └── index.html └── server // node端的源碼目錄 │── pages // koa2的control層目錄 │ └── index.js └── plugins // 自定義插件目錄,適用於node端 └── ......
注意
全部如下劃線開始的文件、目錄在編譯時會被忽略,如
_abc/
或者_abc.js
configs目錄
項目環境配置文件夾,存放多個環境配置文件,如測試1,測試2,生產等環境配置,全部環境配置在應用是會與公共的
default.js
配置文件合併js目錄
存放公共JS,業務JS目錄
公共JS,公共CSS,自動被模板引入。咱們將公共JS分爲兩個部分vendors.js
,common.js
,公共CSS只有一個common.css
vendors.js
: 主要內容爲框架源碼,如react, vue, react-router等 common.js
: 根據業務JS由webpack自動生成 common.css
: vendors.js
中引入的*.styl
(aotoo-hub只支持stylus),webpack會將其分離成common樣式,該文件也會被模板自動引入
dist: 編譯生成 dist/**/js/vendors.js
dist/**/js/*.js
id=root
的div。 *.js
的同名文件新建,如src/../js/abc.js
對應src/../html/abc.html
dist/**/html/*.html
dist/**/css/*.css
import someComponent from 'compoent/someComponent' ...
import someMoudle from 'sync/someMoudle' ...
server
node端服務文件
aotoo-hub的node端基於開源庫aotoo-koa-server
實現。
默認新建的項目是一個純前端項目,但某些項目有SEO需求,須要咱們啓動node端來渲染頁面
# 帶node端啓動項目 $ aotoo dev newProject --server
新項目有默認的demoindex頁面,新項目的node端會自動幫你把全部的node端須要的環境搭建好,同時建立了pages/index.js
這個默認的demoindex頁面
src/newProject/configs/
目錄下的環境配置自動建立,所以若是修改配置請移步src/newProject/configs/
中aotoo-hub
爲你將server環境都配置在lib.js
中,若是你須要擴展配置,如使用新的koa2的插件,建議修改index.js
文件,參考lib.js的寫法src/js/*.js
對應同一個業務,且同名,如src/newProject/js/abc.js
=> server/pages/abc.js
// server/pages/abc.js // 該文件爲koa2框架MVC中的contro層文件 // aotoo-hub接管了渲染方法,所以你只需返回渲染所需的數據部分,oridata /* * * oridata {JSON} 系統傳遞變量,用於渲染模板,須要return oridata * ctx {context} koa2的ctx變量 * * * get: method = GET * post: method = POST * put: method = PUT */ module.exports = function (oridata) { return { get: function name(ctx) { oridata.title = 'aotoo-hub 多項目全棧腳手架' oridata.root = '123' ctx.redirect('/docs') // return oridata }, post: function name(ctx) { return oridata } } }
dist
前端靜態資源編譯後的文件存放位置
1.0.3/
版本目錄,根據aotoo.config中的版本信息
* dev/ 該項目處於開發模式,生產模式使用/pro目錄 * html/ html模板編譯輸出目錄 * mapfile.json 資源映射文件
# 開發編譯,並啓動前端 $ aotoo dev newProject # 若是須要node端(該命令一次生效,終生有效,且後續啓動時不須要參數 `--server`) # 開發編譯,並啓動Node端 $ aotoo dev newProject --server # 生產編譯 $ aotoo build newProject # 只啓動node端(編譯完成) $ aotoo start newProject # 帶環境編譯或啓動 $ aotoo start newProject --config env_test
生產環境支持多開項目,且會爲每一個項目自動分配端口(未指定),開發模式則受制於nodemon對多開不友好的功能,會報錯(pm2替代就能夠),啓動多開也很簡單,能夠參考上面aotoo.config.js
的配置,
將startup: false
設置爲 startup: true
就行了,啓動時不用指定項目名稱,如`
aotoo dev,或者指定一組項目名稱,如:
aotoo dev --name aaa --name bbb`
今天對aotoo-hub有一個大概的介紹,有問題請提issue,鑑於本人有社交懶癌,問題不必定能及時回答,平時畢竟工做有點多.