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 相关文章推荐
Display SQL Server Version Information
Jun 21 Javascript
使用JavaScript库还是自己写代码?
Jan 28 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
Mar 01 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
Jun 17 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
May 24 Javascript
如何学JavaScript?前辈的经验之谈
Dec 28 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
May 08 Javascript
webpack公共组件引用路径简化小技巧
Jun 15 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
May 12 Javascript
npx create-react-app xxx创建项目报错的解决办法
Feb 17 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
Mar 31 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
Nov 16 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
PHP使用者状态管理功能的应用
2006/10/09 PHP
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
初品cakephp 入门基础
2012/02/16 PHP
smarty表格换行实例
2014/12/15 PHP
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
2012/10/11 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
Bootstrap 网格系统布局详解
2017/03/19 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
python字典键值对的添加和遍历方法
2016/09/11 Python
Flask核心机制之上下文源码剖析
2018/12/25 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
python批量下载抖音视频
2019/06/17 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
Python 图片处理库exifread详解
2021/02/25 Python
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
父亲八十大寿答谢词
2014/01/23 职场文书
点菜员岗位职责范本
2014/02/14 职场文书
《争吵》教学反思
2014/02/15 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
病房管理制度范本
2015/08/06 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
Python pygame实现中国象棋单机版源码
2021/06/20 Python
Python tensorflow卷积神经Inception V3网络结构
2022/05/06 Python