国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Webpack + Vue2 + Koa2 構建應用

Bryan / 2078人閱讀

摘要:從第一個中間件開始執行,遇到進入下一個中間件,一直執行到最后一個中間件,在逆序,執行上一個中間件之后的代碼,一直到第一個中間件執行結束才發出響應。

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中文文檔

Koa2

koa的中間件是由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年1月前端月報

    摘要:平日學習接觸過的網站積累,以每月的形式發布。年以前看這個網址概況在線地址前端開發群月報提交原則技術文章新的為主。 平日學習接觸過的網站積累,以每月的形式發布。2017年以前看這個網址:http://www.kancloud.cn/jsfron... 概況 在線地址:http://www.kancloud.cn/jsfront/month/82796 JS前端開發群月報 提交原則: 技...

    FuisonDesign 評論0 收藏0
  • 2017年1月前端月報

    摘要:平日學習接觸過的網站積累,以每月的形式發布。年以前看這個網址概況在線地址前端開發群月報提交原則技術文章新的為主。 平日學習接觸過的網站積累,以每月的形式發布。2017年以前看這個網址:http://www.kancloud.cn/jsfron... 概況 在線地址:http://www.kancloud.cn/jsfront/month/82796 JS前端開發群月報 提交原則: 技...

    ivyzhang 評論0 收藏0
  • 2017年1月前端月報

    摘要:平日學習接觸過的網站積累,以每月的形式發布。年以前看這個網址概況在線地址前端開發群月報提交原則技術文章新的為主。 平日學習接觸過的網站積累,以每月的形式發布。2017年以前看這個網址:http://www.kancloud.cn/jsfron... 概況 在線地址:http://www.kancloud.cn/jsfront/month/82796 JS前端開發群月報 提交原則: 技...

    CloudwiseAPM 評論0 收藏0

發表評論

0條評論

Bryan

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<