摘要:從第一個中間件開始執行,遇到進入下一個中間件,一直執行到最后一個中間件,在逆序,執行上一個中間件之后的代碼,一直到第一個中間件執行結束才發出響應。
github地址: https://github.com/zdliuccit/... 歡迎star
該構建適用PC端開發,通過配置亦可支持移動端開發
具體以代碼為主,持續更新....
技術棧Webpack3
Koa2
Axios
Vue2 & vue-router
Babel Es6/7
Eslint
stylus postcss
$ npm i 安裝npm包 $ npm start 啟動項目
注: 該構建用到的npm包說明參考 doc目錄下的 npm包說明.md文檔
目錄結構 Webpack3$ npm i webpack -D
webpack 的配置項主要包括以下幾點:
entry: 入口,String||Array||Object
output: 出口,定義打包輸出的文件;包括路徑,文件名,還可能有運行時的訪問路徑(publicPath)參數
module: webpack將所有的資源都看做是模塊,而模塊就需要加載器;主要定義一些loaders,定義哪些后綴名的文件應該用哪些loader
test: 檢測哪些文件需要此loader,是一個正則表達式
exclude: 忽略哪些文件
resolve: 定義能夠被打包的文件,文件后綴名
plugins: 定義一些額外的插件
...
webpack配置文件
基礎配置webpack.config.base
開發配置webpack.config.dev.js
生產配置webpack.config.prod.js
Webpack配置可以參考官方 or Webpack中文文檔
Koa2koa的中間件是由generator組成的。
從第一個中間件開始執行,遇到next進入下一個中間件,一直執行到最后一個中間件,
在逆序,執行上一個中間件next之后的代碼,一直到第一個中間件執行結束才發出響應。
這里Koa2的中間件必須使用ES7語法 async/await
Koa2 取代webpack-dev-server作為打包服務的部署方案,代碼如下:
const app = new Koa() const uri = "http://" + currentIP + ":" + appConfig.appPort const devMiddleware = webpackDevMiddleware(clientCompiler, { publicPath: config.output.publicPath, headers: { "Access-Control-Allow-Origin": "*" }, stats: { colors: true, }, noInfo: false, watchOptions: { aggregateTimeout: 300, poll: true }, }) // 中間件,一組async函數,generator函數需要convert轉換 const middleWares = [ // 日志記錄 loggerMiddleware, // 壓縮響應 require("koa-compress")(), // 錯誤處理 errorMiddleware, // webpack開發中間件 convert(devMiddleware), // webpack熱替換中間件 convert(webpackHotMiddleware(clientCompiler)), // 手動設置cookie方法 setCookieMiddleware, // http中間件 httpMiddleware(), // 插入自定義中間件 ...appConfig.middleWares, // 路由 KoaRouter.middleware(), // 代理中間件 proxyMiddleware(), ] middleWares.forEach((middleware) => { if (!middleware) { return } app.use(middleware) }) console.log("> Starting dev server...") devMiddleware.waitUntilValid(() => { console.log("> Listening at " + uri + " ") opn(uri) }) // 錯誤處理 app.on("error", (err) => { console.error("Server error: %s %s ", err.stack || "") }) const server = app.listen(appConfig.appPort) process.on("SIGTERM", () => { console.log("Stopping dev server") devMiddleware.close() server.close(() => { process.exit(0) }) })Babel Es6/7
babel-core
babel-preset-es2015 打包了 es6 的特性
babel-preset-latest latest是一個特殊的presets,包括了es2015,es2016,es2017的插件(目前為止,以后有es2018也會包括進去)。 即總是包含最新的編譯插件。
babel-preset-env
推薦使用babel-preset-env,其他模式會把瀏覽器支持的一些es6/7新特性轉成ES5代碼,有點浪費。
Axios基于 Promise 的 HTTP 請求客戶端,可同時在瀏覽器和 node.js 中使用
瀏覽器支持
使用HTTP請求
對于在vue組件中使用: this.http.get(url, options) this.http.delete(url, options) this.http.post(url, data, options) this.http.put(url, data, options) 對于非vue組件中使用: import http from "@config/utils/http" http.get(url, options) http.delete(url, options) http.post(url, data, options) http.put(url, data, options) 對于post和put方法,必須提供第二個data參數,即提供一個空對象,比如: this.http.post(url, {})使用 ESlint 進行代碼檢查
特點:
默認規則包含所有 JSLint、JSHint 中存在的規則,易遷移
規則可配置性高:可設置「警告」、「錯誤」兩個 error 等級,或者直接禁用
.eslintrc.js配置文件常見的格式
{ root: true, parserOptions: { //EsLint通過parserOptions,允許指定校驗的ecma的版本,及ecma的一些特性 ecmaVersion: 6, //指定ECMAScript支持的版本,6為ES6 sourceType: "module", //指定來源的類型,有兩種”script”或”module” ecmaFeatures: { // ecmaFeatures指定你想使用哪些額外的語言特性 experimentalObjectRestSpread: true, } }, parser: "babel-eslint", // EsLint默認使用esprima做腳本解析,也可以切換成babel-eslint解析 env: { // Environment可以預設好的其他環境的全局變量,如brower、node環境變量、es6環境變量、mocha環境變量等 browser: true, node: true, es6: true, mocha: true }, plugins: [ // EsLint允許使用第三方插件 "html", "import", "promise", ], extends: "standard", // Extends是EsLint默認推薦的驗證你可以使用配置選擇哪些校驗是你所需要的 rules: [ // 自定義規則 ], globals: { // 即插件在執行過程中用到的其它全局變量 } }app.config.js
module.exports = { // 主服務啟動端口 appPort: serverConfig.appPort, // 代理配置,可支持多個代理,key為前綴,命中后,會把前綴去掉,轉發到代理服務器 proxy: serverConfig.proxy, // webpack服務端口,分離模式啟動時用到 webpackDevServerPort: 9002, // webpack的差異化配置 webpack: { entry: { app: path.join(__dirname, "client/index.js"), // 入口 vendor: ["vue", "vue-router", "vue-template-compiler"] // 拆分框架代碼 }, // 是否對樣式啟用px到rem的轉換,配合config/utils/responsive-design.js適配移動端開發, 默認不開啟 enablePx2Rem: false, // 自定義Alias設置 resolveAlias: {}, // 擴展rules rules: [], // 擴展css postcss postcss: [], }, // 自定義中間件 async await函數寫法 middleWares: [] }Configuration tasks/命令
npm start: 啟動開發模式下的server
npm run build: 打包生產模式的代碼
繼續完善....
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/88622.html
摘要:平日學習接觸過的網站積累,以每月的形式發布。年以前看這個網址概況在線地址前端開發群月報提交原則技術文章新的為主。 平日學習接觸過的網站積累,以每月的形式發布。2017年以前看這個網址:http://www.kancloud.cn/jsfron... 概況 在線地址:http://www.kancloud.cn/jsfront/month/82796 JS前端開發群月報 提交原則: 技...
摘要:平日學習接觸過的網站積累,以每月的形式發布。年以前看這個網址概況在線地址前端開發群月報提交原則技術文章新的為主。 平日學習接觸過的網站積累,以每月的形式發布。2017年以前看這個網址:http://www.kancloud.cn/jsfron... 概況 在線地址:http://www.kancloud.cn/jsfront/month/82796 JS前端開發群月報 提交原則: 技...
摘要:平日學習接觸過的網站積累,以每月的形式發布。年以前看這個網址概況在線地址前端開發群月報提交原則技術文章新的為主。 平日學習接觸過的網站積累,以每月的形式發布。2017年以前看這個網址:http://www.kancloud.cn/jsfron... 概況 在線地址:http://www.kancloud.cn/jsfront/month/82796 JS前端開發群月報 提交原則: 技...
閱讀 3291·2021-11-25 09:43
閱讀 2093·2021-09-22 10:02
閱讀 3348·2021-09-06 15:00
閱讀 2305·2019-08-30 15:56
閱讀 2356·2019-08-30 15:54
閱讀 3233·2019-08-30 14:14
閱讀 2268·2019-08-29 17:25
閱讀 2909·2019-08-29 17:16