github地址: https://github.com/zdliuccit/... 欢迎starcss
该构建适用PC端开发,经过配置亦可支持移动端开发html
具体以代码为主,持续更新....vue
$ npm i 安装npm包 $ npm start 启动项目
注: 该构建用到的npm包说明参考 doc
目录下的 npm包说明.md文档node
$ npm i webpack -D
webpack 的配置项主要包括如下几点:webpack
webpack配置文件ios
webpack.config.base
webpack.config.dev.js
webpack.config.prod.js
Webpack配置能够参考官方 or Webpack中文文档git
koa的中间件是由generator组成的。
从第一个中间件开始执行,遇到next进入下一个中间件,一直执行到最后一个中间件,
在逆序,执行上一个中间件next以后的代码,一直到第一个中间件执行结束才发出响应。es6
这里Koa2的中间件必须使用ES7语法 async/awaitgithub
Koa2 取代webpack-dev-server做为打包服务的部署方案,代码以下:web
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 + '\n') opn(uri) }) // 错误处理 app.on('error', (err) => { console.error('Server error: \n%s\n%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-core
babel-preset-es2015
打包了 es6 的特性babel-preset-latest
latest是一个特殊的presets,包括了es2015,es2016,es2017的插件(目前为止,之后有es2018也会包括进去)。 即老是包含最新的编译插件。babel-preset-env
推荐使用babel-preset-env
,其余模式会把浏览器支持的一些es6/7新特性转成ES5代码,有点浪费。
基于 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, {})
特色:
{ 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: { // 即插件在执行过程当中用到的其它全局变量 } }
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: [] }
继续完善....