vue-cli3.0使用及部分配置详解


Posted in Javascript onAugust 29, 2018

好长一段时间没有关注vue脚手架了,昨天因为需要个后台模板,用脚手架

搞了一下,竟然发现指令不能用了,看官方文档已经升级3.0,也是试的玩了一下,

大致写写怎么玩的!

1.先全局安装vue-cli3.0

vue-cli3.0使用及部分配置详解

检测安装:

vue -V

vue-cli3.0使用及部分配置详解

2.创建项目(这个就跟react创建脚手架项目比较像了)

vue-cli3.0使用及部分配置详解 

vue-cli3.0使用及部分配置详解

这里如果你是第一次用3.0版本的话,是没有前两个的,而只有最后两个,这里是

让你选的,第一个是默认配置,一般选第二个,自己配置,这里选择最后一个

在选择功能后,会询问更细节的配置,

TypeScript:

是否使用class风格的组件语法:Use class-style component syntax?

是否使用babel做转义:Use Babel alongside TypeScript for auto-detected polyfills?

CSS Pre-processors:

选择CSS 预处理类型:Pick a CSS pre-processor

Linter / Formatter

选择Linter / Formatter规范类型:Pick a linter / formatter config

选择lint方式,保存时检查/提交时检查:Pick additional lint features

Testing

选择Unit测试方式

选择E2E测试方式vue-cli3.0使用及部分配置详解

当你选择后会出现上面图上的东西,这里你可以自由选择用哪些配置,按上下键

选择哪一个,按空格键确定,所有的都选择好后,按enter键进行下一步,这里

演示,我随便选了几个

vue-cli3.0使用及部分配置详解

下一步之后问询问你安装哪一种 CSS 预处理语言,你随意选择,我是一直用的less

vue-cli3.0使用及部分配置详解

上面这个是问你选择哪个自动化代码格式化检测,配合vscode编辑器的

Prettier - Code formatter插件,我选的随后一个

vue-cli3.0使用及部分配置详解

这里第一个选项是问你是否保存刚才的配置,选择确定后你下次再创建新项目

就有你以前选择的配置了,不用重新再配置一遍了

vue-cli3.0使用及部分配置详解

上边这俩意思问你像,babel,postcss,eslint这些配置文件放哪?

第一个是:放独立文件放置

第二个是:放package.json里

这里推荐放单独配置文件,选第一个

vue-cli3.0使用及部分配置详解

上边倒数第二行问你是否将以上这些将此保存为未来项目的预配置吗?

最后一个是描述项目,你随意选择,点击确定就开始下载模板了

vue-cli3.0使用及部分配置详解

下载好后,项目结构就变成这样了,相比2.0精简了很多,

然后cd 进项目,启动服务npm run serve,

这里发现少了vue.config.js文件,那以前的配置怎么搞?

vue-cli3.0使用及部分配置详解 

上边是2.0的目录结构

vue-cli3.0使用及部分配置详解 

这个是3.0的目录结构,比2.0少了好多,这些都放在@vue/文件下了,你可以打开看看

下边你要做的就是在根目录下新建一个vue.config.js文件,进行你的配置,具体配置看文档,我在最下边简单罗列了几个

当然如果你不想用3.0的话,还是可以继续使用2.0的,官方文档是这样说的:

vue-cli3.0使用及部分配置详解

这里简单罗列vue,config.js一些配置项

当然你配置接口地址时还是通过下边这个来获取

在main.js里或者单独配置接口地址的文件里:

var env = process.env.NODE_ENV
console.log(env)
// vue.config.js 配置说明
// 这里只列一部分,具体配置惨考文档啊
module.exports = {
  // baseUrl type:{string} default:'/' 
  // 将部署应用程序的基本URL
  // 将部署应用程序的基本URL。
  // 默认情况下,Vue CLI假设您的应用程序将部署在域的根目录下。
  // https://www.my-app.com/。如果应用程序部署在子路径上,则需要使用此选项指定子路径。例如,如果您的应用程序部署在https://www.foobar.com/my-app/,集baseUrl到'/my-app/'.

  baseUrl: process.env.NODE_ENV === 'production' ? '/online/' : '/',

  // outputDir: 在npm run build时 生成文件的目录 type:string, default:'dist'

  // outputDir: 'dist',

  // pages:{ type:Object,Default:undfind } 
/*
 构建多页面模式的应用程序.每个“页面”都应该有一个相应的JavaScript条目文件。该值应该是一
 个对象,其中键是条目的名称,而该值要么是指定其条目、模板和文件名的对象,要么是指定其条目
 的字符串,
 注意:请保证pages里配置的路径和文件名 在你的文档目录都存在 否则启动服务会报错的
*/
  // pages: {
    // index: {
      // entry for the page
      // entry: 'src/index/main.js',
      // the source template
      // template: 'public/index.html',
      // output as dist/index.html
      // filename: 'index.html'
    // },
    // when using the entry-only string format,
    // template is inferred to be `public/subpage.html`
    // and falls back to `public/index.html` if not found.
    // Output filename is inferred to be `subpage.html`.
    // subpage: 'src/subpage/main.js'
  // },

  //  lintOnSave:{ type:Boolean default:true } 问你是否使用eslint
  lintOnSave: true,
  // productionSourceMap:{ type:Bollean,default:true } 生产源映射
  // 如果您不需要生产时的源映射,那么将此设置为false可以加速生产构建
  productionSourceMap: false,
  // devServer:{type:Object} 3个属性host,port,https
  // 它支持webPack-dev-server的所有选项

  devServer: {
    port: 8085, // 端口号
    host: 'localhost',
    https: false, // https:{type:Boolean}
    open: true, //配置自动启动浏览器
    // proxy: 'http://localhost:4000' // 配置跨域处理,只有一个代理
    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'

]
}

静态资源路径

相对路径

  1. 静态资源路径以 @ 开头代表 <projectRoot>/src
  2. 静态资源路径以 ~ 开头,可以引入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 就项目性能而言已经相当友好了,私有制定性也特别强,各种配置也特别贴心,可以根据项目大小和特性制定私有预设,对前期项目搭建而言效率极大提升了。

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

Javascript 相关文章推荐
js实现快速分享功能(你的文章分享工具)
Jun 25 Javascript
JavaScript伸缩的菜单简单示例
Dec 03 Javascript
js window.open弹出新的网页窗口
Jan 16 Javascript
jQuery封装的tab选项卡插件分享
Jun 16 Javascript
jquery合并表格中相同文本的相邻单元格
Jul 17 Javascript
用jquery获取自定义的标签属性的值简单实例
Sep 17 Javascript
关于RequireJS的简单介绍即使用方法
Oct 20 Javascript
webpack构建换肤功能的思路详解
Nov 27 Javascript
LayerClose弹窗关闭刷新方法
Aug 17 Javascript
angularjs通过过滤器返回超链接的方法
Oct 26 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 jQuery
微信小游戏中three.js离屏画布的示例代码
Oct 12 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
Aug 29 #Javascript
Vue CLI3 如何支持less的方法示例
Aug 29 #Javascript
Vue实现美团app的影院推荐选座功能【推荐】
Aug 29 #Javascript
Vuex 使用及简单实例(计数器)
Aug 29 #Javascript
浅谈Vue.use的使用
Aug 29 #Javascript
微信小程序支付前端源码
Aug 29 #Javascript
微信小程序使用swiper组件实现类3D轮播图
Aug 29 #Javascript
You might like
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
默默小谈PHP&amp;MYSQL分页原理及实现
2007/01/02 PHP
php判断类是否存在函数class_exists用法分析
2014/11/14 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
PHP文件上传类实例详解
2016/04/08 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
Python脚本后台运行的几种方式
2015/03/09 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
详解webpack介绍&amp;安装&amp;常用命令
2017/06/29 Javascript
jQuery插件实现的日历功能示例【附源码下载】
2018/09/07 jQuery
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
PyCharm在win10的64位系统安装实例
2017/11/26 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
python实现年会抽奖程序
2019/01/22 Python
Python列表的切片实例讲解
2019/08/20 Python
详解HTML5.2版本带来的修改
2020/05/06 HTML / CSS
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
2014学雷锋活动心得体会
2014/03/10 职场文书
就业意向协议书
2015/01/29 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
高中体育课教学反思
2016/02/16 职场文书
高一化学教学反思
2016/02/22 职场文书
承诺书怎么写 ?
2019/04/16 职场文书
Go语言应该什么情况使用指针
2021/07/25 Golang