vue-cli2&vue-cli3/4

940 阅读3分钟

写在前面

安装系列

  1. 确保已经安装node环境
  2. 安装脚手架

概念理解

vue-cli脚手架:帮我们创建项目的时候默认装了项目必备的一些东西,还有项目目录结构

webpack:是个模块打包工具,把项目中的各种格式文件都作为模块进行统一打包编译。

cli2和cli3/4区别


1. cli3基于webpack4打造,cli2基于webapck3打造
2. cli3倡导0配置,所以移除了cli2的build和config
3. cli3提供 vue-ui命令,提供了可视化配置,更加人性化
4. cli3移除了static文件夹,新增了public文件夹,并且index.html移动到public文件夹中

说明:
- cli2中的static相当于cli3/4中的public,最终都是原封不动的被复制到dist目录
- assert中的文件比如图片,如果项目有做图片大小相关的配置,那么assert中的图片会被这些执行限制配置,最终将执行结果再复制到dist目录

vue-cli2创建项目

创建过程

// vue-cli2创建项目时,需要带上webpack参数,才会基于webapck创建
vue init webpack cli2
vue init webpack 项目名

vue build构建方式选择为什么是runtime-only而没有选择runtime-compiler,具体原因参见vue程序运行过程

目录结构

package.json

{
  "name": "cli2",
  "version": "1.0.0",
  "description": "cli2 study",
  "author": "",
  "private": true,
  "scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "lint": "eslint --ext .js,.vue src",
    "build": "node build/build.js"
  },
  "dependencies": {
    "vue": "^2.5.2"
  },
  "devDependencies": {
    "autoprefixer": "^7.1.2",
    "babel-core": "^6.22.1",
    "babel-eslint": "^8.2.1",
    "babel-helper-vue-jsx-merge-props": "^2.0.3",
    "babel-loader": "^7.1.1",
    "babel-plugin-syntax-jsx": "^6.18.0",
    "babel-plugin-transform-runtime": "^6.22.0",
    "babel-plugin-transform-vue-jsx": "^3.5.0",
    "babel-preset-env": "^1.3.2",
    "babel-preset-stage-2": "^6.22.0",
    "chalk": "^2.0.1",
    "copy-webpack-plugin": "^4.0.1",
    "css-loader": "^0.28.0",
    "eslint": "^4.15.0",
    "eslint-config-standard": "^10.2.1",
    "eslint-friendly-formatter": "^3.0.0",
    "eslint-loader": "^1.7.1",
    "eslint-plugin-import": "^2.7.0",
    "eslint-plugin-node": "^5.2.0",
    "eslint-plugin-promise": "^3.4.0",
    "eslint-plugin-standard": "^3.0.1",
    "eslint-plugin-vue": "^4.0.0",
    "extract-text-webpack-plugin": "^3.0.0",
    "file-loader": "^1.1.4",
    "friendly-errors-webpack-plugin": "^1.6.1",
    "html-webpack-plugin": "^2.30.1",
    "node-notifier": "^5.1.2",
    "optimize-css-assets-webpack-plugin": "^3.2.0",
    "ora": "^1.2.0",
    "portfinder": "^1.0.13",
    "postcss-import": "^11.0.0",
    "postcss-loader": "^2.0.8",
    "postcss-url": "^7.2.1",
    "rimraf": "^2.6.0",
    "semver": "^5.3.0",
    "shelljs": "^0.7.6",
    "uglifyjs-webpack-plugin": "^1.1.1",
    "url-loader": "^0.5.8",
    "vue-loader": "^13.3.0",
    "vue-style-loader": "^3.0.1",
    "vue-template-compiler": "^2.5.2",
    "webpack": "^3.6.0",	// 暴露了webpack
    "webpack-bundle-analyzer": "^2.9.0",
    "webpack-dev-server": "^2.9.1",
    "webpack-merge": "^4.1.0"
  },
  "engines": {
    "node": ">= 6.0.0",
    "npm": ">= 3.0.0"
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ]
}

vue-cli3/cli4创建项目

vue-cli3/4默认已经帮我们安装了webpack功能,并且还隐藏起来了,除了配置文件隐藏之外,把package.json中webpack以及它的版本号也隐藏了,防止开发人员更改

创建过程

// 使用cli3或者4创建vue项目命令
vue create 项目名

目录结构

package.json

{
  "name": "cli3-4",
  "version": "0.1.0",
  "private": true,
  "scripts": {	// 注意cli3/4的命令使用的是vue-cli-service,具体过程可以在node_modules/@vue/cli-service/bin/vue-cli-service.js
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "core-js": "^3.6.5",
    "vue": "^2.6.11"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-service": "~4.5.0",
    "@vue/eslint-config-prettier": "^6.0.0",
    "babel-eslint": "^10.1.0",
    "eslint": "^6.7.2",
    "eslint-plugin-prettier": "^3.1.3",
    "eslint-plugin-vue": "^6.2.2",
    "prettier": "^1.19.1",
    "vue-template-compiler": "^2.6.11"
  }
}

配置系列

vue-cli3/4已经帮我们装了webpack,并且隐藏了相关的配置文件,但是如果开发人员想修改配置,我们可以在根目录下创建vue.config.js文件,这个名字不能更改,因为是webpack内部固定好的;具体固定的位置在node_modules/@vue/cli-service/lib/Service.js

问题系列

问题: 项目配置的入口怎么查找?

查看package.json中的scripts就能找到入口


  "scripts": {	// 注意cli3/4的命令使用的是vue-cli-service,具体过程可以在node_modules/@vue/cli-service/bin/vue-cli-service.js
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },

问题: cli3中的webpack配置被隐藏到哪里?

隐藏位置:node_modules/@vue/cli-service/webpack.config.js


问题: webpack的配置文件隐藏,为什么package.json中连webpack以及版本号都隐藏了?

  • 不留版本号,是担心开发人员更改,导致内部固定使用的webpack因为外部版本的更高而不能使用
  • 没有出现在package.json中,说明项目没有直接依赖webapck,看了配置之后发现,是vue-cli-service进行的依赖处理。

问题: 项目的入口文件为什么是main.js