Vue Cli3 创建项目的方法步骤


Posted in Javascript onOctober 15, 2018

最近的开发项目中使用了vue-cli 3.0,使用体验可以说非常棒了,模板更加制定化,配置更加简洁。以下总结下应用过程中的一些经验。

1. 安装

npm install -g @vue/cli

2. 创建一个项目

vue create iview-admin
# OR
vue ui

Vue Cli3 创建项目的方法步骤

  • default (babel, eslint) 默认套餐,提供 babel 和 eslint 支持。
  • Manually select features 自己去选择需要的功能,提供更多的特性选择。比如如果想要支持 TypeScript ,就应该选择这一项。

Vue Cli3 创建项目的方法步骤

  1. TypeScript 支持使用 TypeScript 书写源码。
  2. Progressive Web App (PWA) Support PWA 支持。
  3. Router 支持 vue-router 。
  4. Vuex 支持 vuex 。
  5. CSS Pre-processors 支持 CSS 预处理器。
  6. Linter / Formatter 支持代码风格检查和格式化。
  7. Unit Testing 支持单元测试。
  8. E2E Testing 支持 E2E 测试。

Vue Cli3 创建项目的方法步骤

3. 运行项目

$ npm run serve

Vue Cli3 创建项目的方法步骤

4. 在根目录创建 vue.config.js 空文件,配置 文件

module.exports = {
 /** 区分打包环境与开发环境
  * process.env.NODE_ENV==='production' (打包环境)
  * process.env.NODE_ENV==='development' (开发环境)
  * baseUrl: process.env.NODE_ENV==='production'?"https://cdn.didabisai.com/front/":'front/',
  */
 // 基本路径
 baseUrl: '/',
 // 输出文件目录
 outputDir: 'dist',
 // eslint-loader 是否在保存的时候检查
 lintOnSave: true,
 // use the full build with in-browser compiler?
 // https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only
 // compiler: false,
 // webpack配置
 // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
 chainWebpack: () => {},
 configureWebpack: () => {},
 //如果想要引入babel-polyfill可以这样写
 // configureWebpack: (config) => {
 //  config.entry = ["babel-polyfill", "./src/main.js"]
 // },
 // vue-loader 配置项
 // https://vue-loader.vuejs.org/en/options.html
 // vueLoader: {},
 // 生产环境是否生成 sourceMap 文件
 productionSourceMap: true,
 // css相关配置
 css: {
  // 是否使用css分离插件 ExtractTextPlugin
  extract: true,
  // 开启 CSS source maps?
  sourceMap: false,
  // css预设器配置项
  loaderOptions: {},
  // 启用 CSS modules for all css / pre-processor files.
  modules: false
 },
 // use thread-loader for babel & TS in production build
 // enabled by default if the machine has more than 1 cores
 parallel: require('os').cpus().length > 1,
 // 是否启用dll
 // See https://github.com/vuejs/vue-cli/blob/dev/docs/cli-service.md#dll-mode
 // dll: false,
 // PWA 插件相关配置
 // see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
 pwa: {},
 // webpack-dev-server 相关配置
 devServer: {
  // open: process.platform === 'darwin',
  // 自动打开浏览器
  open: true,
  host: '0.0.0.0',
  port: 8080,
  https: false,
  hotOnly: false,
  // 处理跨域问题
  proxy: {}, // 设置代理
  before: app => {}
 },
 // 第三方插件配置
 pluginOptions: {
  // ...
 }
}

设置代理

# string

module.exports = {

 devServer: {

 proxy: '<url>'

 }

}

 

# Object

module.exports = {

 devServer: {

 proxy: {

  '/api': {

  target: '<url>',

  ws: true,

  changeOrigin: true

  },

  '/foo': {

  target: '<other_url>'

  }

 }

 }

}

启用dll

启用dll后,我们的动态库文件每次打包生成的vendor的[chunkhash]值就会一样,其值可以是 true/false,也可以制定特定的代码库。

module.exports = {

 dll: true

}

module.exports = {

 dll: [

 'dep-a',

 'dep-b/some/nested/file.js'

 ]

}

静态资源路径

相对路径

  • 静态资源路径以 @  开头代表  <projectRoot>/src
  • 静态资源路径以 ~  开头,可以引入node modules内的资源

public文件夹里的静态资源引用

# 在 public/index.html中引用静态资源

<%= webpackConfig.output.publicPath %>

<link rel="shortcut icon" href="<%= webpackConfig.output.publicPath %>favicon.ico" rel="external nofollow"  >

# vue templates中,需要在data中定义baseUrl

<template>

 <img :src="`${baseUrl}my-image.png`">

</template>

<script>

 data () {

 return {

  baseUrl: process.env.BASE_URL

 }

 }

</script>

webpack配置修改

用 webpack-chain 修改webpack相关配置,强烈建议先熟悉webpack-chain和vue-cli 源码,以便更好地理解这个选项的配置项。

对模块处理配置

// vue.config.js

module.exports = {

 chainWebpack: config => {

 config.module

  .rule('js')

  .include

   .add(/some-module-to-transpile/) // 要处理的模块

 }

}

修改webpack Loader配置

// vue.config.js

module.exports = {

 chainWebpack: config => {

 config.module

  .rule('scss')

  .use('sass-loader')

  .tap(options =>

  merge(options, {

   includePaths: [path.resolve(__dirname, 'node_modules')],

  })

  )

 }

}

修改webpack Plugin配置

// vue.config.js

module.exports = {

 chainWebpack: config => {

 config

  .plugin('html')

  .tap(args => {

  return [/* new args to pass to html-webpack-plugin's constructor */]

  })

 }

}

eg: 在本次项目较小,只对uglifyjs进行了少量的修改,后期如果还有配置上优化会继续添加。

chainWebpack: config => {

 if (process.env.NODE_ENV === 'production') {

  config

   .plugin('uglify')

   .tap(([options]) =>{

    // 去除 console.log

    return [Object.assign(options, {

     uglifyOptions: { compress: {

      drop_console : true,

      pure_funcs: ['console.log']

     }}

    })]

   })

 }

}

全局变量的设置

在项目根目录创建以下项目:

.env    # 在所有环节中执行

.env.local   # 在所有环境中执行,git会ignored

.env.[mode]   # 只在特定环境执行( [mode] 可以是 "development", "production" or "test" )

.env.[mode].local # 在特定环境执行, git会ignored

.env.development # 只在生产环境执行

.env.production  # 只在开发环境执行

在文件里配置键值对:

# 键名须以VUE_APP开头

VUE_APP_SECRET=secret

在项目中访问:

console.log(process.env.VUE_APP_SECRET)

这样项目中的 process.env.VUE_APP_SECRET 就会被 secret 所替代。

vue-cli 3 就项目性能而言已经相当友好了,私有制定性也特别强,各种配置也特别贴心,可以根据项目大小和特性制定私有预设,对前期项目搭建而言效率极大提升了。

具体请查看 Vue Cli 官网

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
Aug 22 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
Jan 06 Javascript
nodeType属性返回被选节点的节点类型介绍
Nov 22 Javascript
node.js中的path.normalize方法使用说明
Dec 08 Javascript
javascript数组去重方法汇总
Apr 23 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
Jan 22 Javascript
基于JQuery及AJAX实现名人名言随机生成器
Feb 10 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
Apr 13 Javascript
Vue实现active点击切换方法
Mar 16 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
Sep 25 Javascript
原生JS实现自定义下拉单选选择框功能
Oct 12 Javascript
JavaScript通如何过RGraph实现动态仪表盘
Oct 15 Javascript
Vue-Router基础学习笔记(小结)
Oct 15 #Javascript
vue安装和使用scss及sass与scss的区别详解
Oct 15 #Javascript
ndm:NPM的桌面GUI应用程序
Oct 15 #Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
Oct 15 #Javascript
vue+axios+promise实际开发用法详解
Oct 15 #Javascript
javascript中关于类型判断的一些疑惑小结
Oct 14 #Javascript
JS面试题大坑之隐式类型转换实例代码
Oct 14 #Javascript
You might like
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
php类
2006/11/27 PHP
php指定函数参数默认值示例代码
2013/12/04 PHP
PHP中使用TCPDF生成PDF文档实例
2014/07/01 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
基于jquery实现的鼠标滑过按钮改变背景图片
2011/07/15 Javascript
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
python关闭windows进程的方法
2015/04/18 Python
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
Python 找出英文单词列表(list)中最长单词链
2020/12/14 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
2021/01/12 Python
Tech21美国/加拿大:英国NO.1防摔保护壳品牌
2018/01/20 全球购物
外贸业务员求职自荐信分享
2013/09/21 职场文书
促销活动总结范文
2014/04/30 职场文书
销售顾问工作计划书
2014/08/15 职场文书
2014年度党员自我评议
2014/09/13 职场文书
临床医学生职业规划书范文
2014/10/25 职场文书