vue-cli构建项目

参考连接:

官网https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create

开始

vue create projectName
cd projectName
yarn serve //yarn的启动项目,或者npm run serve

新建文件夹

router  //放置路由表

views   //放置页面组件

utils   // 放置公共方法

styles  // 放置公共样式表

store   //放置vuex

安装依赖

1. 安装vue-router

//安装:
npm install --save vue-router 
/*新建路由表:
router目录/index.js文件:*/
import Router from 'vue-router'
Vue.use(Router)
const router = new Router({。。。})
export default router
main.js引入:
import router from './router' //引入路由表./router/index.j
new Vue({
..., router,
...., render: h => h(App), }).$mount('#app')

  

2. 安装vuex

//安装:
yarn add vuex
//新建 store/index.js :
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

const store = new Vuex.Store({
...
})
export default store
//main.js引入:
import router from './router' //引入
new Vue({
  store ,
  render: h => h(App),
}).$mount('#app')

3. 安装normalize.css

安装:
npm install --save normalize.css 
main.js引入:
import 'normalize.css/normalize.css'

 

软件简介

Normalize.css 是一个可以定制的CSS文件,它让不同的浏览器在渲染网页元素的时候形式更统一

Normalize.css 能干什么:

保留有用的默认值,不同于许多 CSS 的重置

标准化的样式,适用范围广的元素。

纠正错误和常见的浏览器的不一致性。

一些细微的改进,提高了易用性。

使用详细的注释来解释代码。

支持的浏览器:

Google Chrome (latest)

Mozilla Firefox (latest)

Mozilla Firefox ESR

Opera (latest)

Apple Safari 6+

Internet Explorer 8+

4. 安装sass-loader

yarn add sass-loader -D
yarn add node-sass -D

5. 安装js-cookie

提供封装了document.cookies 处理操作的api

yarn add js-cookie
//使用:
import Cookies from 'js-cookie'

 //添加/修改.setItem(key,value)
Cookies.setItem('foo''bar')

//删除.removeItem(key)
Cookies.removeItem('foo')

//获取.getItem(key),返回value
Cookies.getItem('foo') //'bar'

//是否拥有.hasItem(key),返回boolean
Cookies.getItem('foo') //true
//.keys()获取所有key,返回数组
Cookies.keys() //['foo']

6. 安装进度条nprogress

路由切换时的进度条(浏览器顶部可见进度条)

详情参考:https://www.npmjs.com/package/nprogress

yarn add nprogress
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

NProgress.configure({ ... }) // 配置进度条

NProgress.start() // 开始
....
NProgress.done() //结束


//.set()设置进度0~1
NProgress.set(0.0); //相当于.start()
NProgress.set(0.4);
NProgress.set(1.0); //相当于.done()


//.inc()进度++, This will never get to 100%: use it for every image load (or similar).
NProgress.inc();  //This increments it with a random amount and never get to 100%;
NProgress.inc(0.2);  // This will get the current status value and adds 0.2 until status is 0.994
 

7. 安装element-ui

一个适合做后台管理的vue-ui框架(按需安装

详情参考:https://element.eleme.cn/#/zh-CN/component/installation

//安装:
npm install --save element-ui
//main.js引入:
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import locale from 'element-ui/lib/locale/lang/zh-CN.js' // lang i18n
// set ElementUI lang to zh-CN
Vue.use(ElementUI, {
  locale
})

 

8. 安装axios

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

 

9.安装svg-sprite-loader

svgsprite是优化的一种方式,减少了图片文件的加载。

svg-sprite-loader使用和原理 参考:https://segmentfault.com/a/1190000015367490

至于使用svg还是iconfont? 参考:https://www.jianshu.com/p/34167208c699

特性

  • 从浏览器中创建 XMLHttpRequests
  • node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御 XSRF

具体参考:http://www.axios-js.com/zh-cn/docs/

//安装
yarn add axios
axios.get('/user/12345').then(res=>{
// 响应处理
}).catch(err=>{
// 未响应处理
})
import axios from 'axios'
import defaultSettings from '@/settings'
import { Message } from 'element-ui'
import { getSessionStorage, isExpires } from '@/utils/common'

const instance = axios.create({
    baseURL: defaultSettings.baseURL,
    timeout: 10000 //超时时间
});

/**请求拦截**/
instance.interceptors.request.use(config=>{
    return config
}, error=>{
    Message.error('请求超时!');
    return Promise.reject(error)
})

//  响应拦截
service.interceptors.response.use(res=>{
    // 拦截处理
    if (res.status < 500) {
        return Promise.resolve(res)
    } else {
         Message.error(`服务器错误:status=${res.status}$`)
        return Promise.reject(res)
    }
}, error=>{
    return Promise.reject(error)
})

export function request({
    url = defaultSettings.deFaultUrl,
    method = 'post',
    params = {},
    header = {}
}) {
    // 可以添加请求参数的增删改除
    // 可以增加请求条件
    let access_token = getSessionStorage('access_token')
    if (!access_token || isExpires()) {
        // 过期/没有access_token
        //重新请求access_token
        // access_token = getSessionStorage('access_token')
    } else {
        //有效access_token
    }
    // 每次请求都加上access_token

    return instance({
        method,
        url,
        data: {
            ...params
        },
        headers: {
            'Content-Type': 'application/json;charset=UTF-8',
            ...header
        }
    })
}

  

配置vue.config.js

publicPath

Default: '/'

  • 如果应用是被部署在一个域名的根路径

    例如 https://www.my-app.com/ (配置publicPath: /)

  • 如果应用被部署在一个子路径,你就需要用这个选项指定这个子路径。

    例如https://www.my-app.com/my-app/,则(配置 publicPath:/my-app/)

注意:

  1. 这个值也可以被设置为空字符串 ('') 或是相对路径 ('./'),这样所有的资源都会被链接为相对路径,这样打出来的包可以被部署在任意路径,也可以用在类似 Cordova hybrid 应用的文件系统中。
  2. 相对路径的 publicPath 有一些使用上的限制。以下情况下,应当避免使用相对 publicPath:
    •    当使用基于 HTML5 history.pushState 的路由时;
    •    当使用 pages 选项构建多页面应用时。

 

outputDir

Default: 'dist'

当运行 vue-cli-service build 时生成的生产环境构建文件的目录

注意目标目录在构建之前会被清除 (构建时传入 --no-clean 可关闭该行为)。

 

assetsDir

Default: ''

放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。outputDir/assetsDir

注意从生成的资源覆写 filename 或 chunkFilename 时,assetsDir 会被忽略。

 

indexPath

Default: 'index.html'

指定生成的 index.html 的输出路径 (相对于 outputDir)。也可以是一个绝对路径。

filenameHashing

Default: true

默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存。然而,这也要求 index 的 HTML 是被 Vue CLI 自动生成的。如果你无法使用 Vue CLI 生成的 index HTML,你可以通过将这个选项设为 false 来关闭文件名哈希。

pages

type: Object

Default: undefined

multi-page 模式下构建应用。每个“page”应该有一个对应的 JavaScript 入口文件。其值应该是一个对象,对象的 key 是入口的名字,value 是:

  • 一个指定了 entry, template, filename, title 和 chunks 的对象 (除了 entry 之外都是可选的);
  • 或一个指定其 entry 的字符串。
module.exports = {
  pages: {
    index: {
      // page 的入口
      entry: 'src/index/main.js',
      // 模板来源
      template: 'public/index.html',
      // 在 dist/index.html 的输出
      filename: 'index.html',
      // 当使用 title 选项时,
      // template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
      title: 'Index Page',
      // 在这个页面中包含的块,默认情况下会包含
      // 提取出来的通用 chunk 和 vendor chunk。
      chunks: ['chunk-vendors', 'chunk-common', 'index']
    },
    // 当使用只有入口的字符串格式时,
    // 模板会被推导为 `public/subpage.html`
    // 并且如果找不到的话,就回退到 `public/index.html`。
    // 输出文件名会被推导为 `subpage.html`。
    subpage: 'src/subpage/main.js'
  }
}

  

提示:

当在 multi-page 模式下构建时,webpack 配置会包含不一样的插件 (这时会存在多个 html-webpack-plugin 和 preload-webpack-plugin 的实例)。如果你试图修改这些插件的选项,请确认运行 vue inspect。

lintOnSave

Type: boolean | 'warning' | 'default' | 'error'

Default: 'default'

是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码。这个值会在 @vue/cli-plugin-eslint 被安装之后生效。

  1.  true || 'warning' 时,eslint-loader 会将 lint 错误输出为编译警告。默认情况下,警告仅仅会被输出到命令行,且不会使得编译失败
  2.  default时, 这会强制 eslint-loader 将 lint 错误输出为编译错误,同时也意味着 lint 错误将会导致编译失败。
  3.  error时, 将会使得 eslint-loader 把 lint 警告也输出为编译错误,这意味着 lint 警告将会导致编译失败。
  4. 或者,你也可以通过设置让浏览器 overlay 同时显示警告和错误

module.exports = {
  devServer: {
    overlay: {
      warnings: true,
      errors: true
    }
  }
}

注意: lintOnSave 是一个 truthy 的值时,eslint-loader 在开发和生产构建下都会被启用。如果你想要在生产构建时禁用 eslint-loader,你可以用如下配置:

module.exports = {
  lintOnSave: process.env.NODE_ENV !== 'production'
}

runtimeCompiler

Type: boolean

Default: false

是否使用包含运行时编译器的 Vue 构建版本。设置为 true 后你就可以在 Vue 组件中使用 template 选项了,但是这会让你的应用额外增加 10kb 左右。

 

transpileDependencies

Type: Array<string | RegExp>

Default: []

默认情况下 babel-loader 会忽略所有 node_modules 中的文件。如果你想要通过 Babel 显式转译一个依赖,可以在这个选项中列出来。

productionSourceMap

Type: boolean

Default: true

如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建 (为true生成的chunk.js还是chunk.map)


crossorigin

Type: string

Default: undefined

设置生成的 HTML 中 <link rel="stylesheet"> 和 <script> 标签的 crossorigin 属性。

注意该选项仅影响由 html-webpack-plugin 在构建时注入的标签 - 直接写在模版 (public/index.html) 中的标签不受影响。

 

integrity

Type: boolean

Default: false

在生成的 HTML 中的 <link rel="stylesheet"> 和 <script> 标签上启用 Subresource Integrity (SRI)。如果你构建后的文件是部署在 CDN 上的,启用该选项可以供额外的安全性

注意该选项仅影响由 html-webpack-plugin 在构建时注入的标签 - 直接写在模版 (public/index.html) 中的标签不受影响。

另外,当启用 SRI 时,preload resource hints 会被禁用,因为 Chrome 的一个 bug 会导致文件被下载两次

configureWebpack

Type: Object | Function

如果这个值是一个对象,则会通过 webpack-merge 合并到最终的配置中。

如果这个值是一个函数,则会接收被解析的配置作为参数。该函数既可以修改配置并不返回任何东西,也可以返回一个被克隆或合并过的配置版本。

更多细节可查阅:配合 webpack > 简单的配置方式

 

chainWebpack

Type: Function

是一个函数,会接收一个基于 webpack-chain 的 ChainableConfig 实例。允许对内部的 webpack 配置进行更细粒度的修改。

更多细节可查阅:配合 webpack > 链式操作

css.modules

v4 起已弃用,请使用css.requireModuleExtension v3 中,这个选项含义与 css.requireModuleExtension 相反。


css.requireModuleExtension

Type: boolean

Default: true

默认情况下,只有 *.module.[ext] 结尾的文件才会被视作 CSS Modules 模块。设置为 false 后你就可以去掉文件名中的 .module 并将所有的 *.(css|scss|sass|less|styl(us)?) 文件视为 CSS Modules 模块。

提示

如果你在 css.loaderOptions.css 里配置了自定义的 CSS Module 选项,则 css.requireModuleExtension 必须被显式地指定为 true 或者 false,否则我们无法确定你是否希望将这些自定义配置应用到所有 CSS 文件中。

 

css.extract

type: boolean | Object

Default: 生产环境下是 true,开发环境下是 false

是否将组件中的 CSS 提取至一个独立的 CSS 文件中 (而不是动态注入到 JavaScript 中的 inline 代码)。

同样当构建 Web Components 组件时它总是会被禁用 (样式是 inline 的并注入到了 shadowRoot 中)。

当作为一个库构建时,你也可以将其设置为 false 免得用户自己导入 CSS。

提取 CSS 在开发环境模式下是默认不开启的,因为它和 CSS 热重载不兼容。然而,你仍然可以将这个值显性地设置为 true 在所有情况下都强制提取。

css.sourceMap

Type: boolean

Default: false

是否为 CSS 开启 source map。设置 true 之后可能会影响构建的性能

css.loaderOptions

Type: Object

Default: {}

CSS 相关的 loader 传递选项

 

module.exports = {
  css: {
    loaderOptions: {
      css: {
        // 这里的选项会传递给 css-loader
      },
      postcss: {
        // 这里的选项会传递给 postcss-loader
      }
    }
  }
}

 

  

支持的 loader 有:

另外,也可以使用 scss 选项,针对 scss 语法进行单独配置(区别于 sass 语法)。

更多细节可查阅:向预处理器 Loader 传递选项

 

提示

相比于使用 chainWebpack 手动指定 loader 更推荐上面这样做,因为这些选项需要应用在使用了相应 loader 的多个地方。

 

devServer

Type: Object

所有 webpack-dev-server 的选项都支持。注意:

有些值像 host、port 和 https 可能会被命令行参数覆写。

有些值像 publicPath 和 historyApiFallback 不应该被修改,因为它们需要和开发服务器的 publicPath 同步以保障正常的工作。

devServer.proxy

Type: string | Object

如果你的前端应用和后端 API 服务器没有运行在同一个主机上,你需要在开发环境下将 API 请求代理到 API 服务器。这个问题可以通过 vue.config.js 中的 devServer.proxy 选项来配置。

devServer.proxy 可以是一个指向开发环境 API 服务器的字符串:

module.exports = {
  devServer: {
    proxy: 'http://localhost:4000'  //实际服务器地址
  }
}

  

这会告诉开发服务器将任何未知请求 (没有匹配到静态文件的请求) 代理到http://localhost:4000

如果你想要更多的代理控制行为,也可以使用一个 path: options 成对的对象。完整的选项可以查阅 http-proxy-middleware 。

 

module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: '<url>', //实际服务器地址
        ws: true,
        changeOrigin: true
      },
      '/foo': {
        target: '<other_url>'
      }
    }
  }
}

  

parallel

Type: boolean

Default: require('os').cpus().length > 1

是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用,仅作用于生产构建。

pwa

Type: Object

PWA 插件传递选项。

pluginOptions

Type: Object

这是一个不进行任何 schema 验证的对象,因此它可以用来传递任何第三方插件选项。例如:

module.exports = {
  pluginOptions: {
    foo: {
      // 插件可以作为 `options.pluginOptions.foo` 访问这些选项。
    }
  }
}

 

Babel

Babel 可以通过 babel.config.js 进行配置。

提示

Vue CLI 使用了 Babel 7 中的新配置格式 babel.config.js。和 .babelrc 或 package.json 中的 babel 字段不同,这个配置文件不会使用基于文件位置的方案,而是会一致地运用到项目根目录以下的所有文件,包括 node_modules 内部的依赖。我们推荐在 Vue CLI 项目中始终使用 babel.config.js 取代其它格式。

所有的 Vue CLI 应用都使用 @vue/babel-preset-app,它包含了 babel-preset-envJSX 支持以及为最小化包体积优化过的配置。通过它的文档可以查阅到更多细节和 preset 选项。

ESLint

ESLint 可以通过 .eslintrc 或 package.json 中的 eslintConfig 字段来配置。

更多细节可查阅 @vue/cli-plugin-eslint

TypeScript

TypeScript 可以通过 tsconfig.json 来配置。

更多细节可查阅 @vue/cli-plugin-typescript

 

原文地址:https://www.cnblogs.com/baixinL/p/14271811.html