Vue.js+vue-element搭建属于自己的后台管理模板:创建一个项目(四)
Vue.js+vue-element搭建属于自己的后台管理模板:创建一个项目(四)
前言
本章主要讲解通过Vue CLI 脚手架构建工具创建一个项目,在学习Vue CLI之前我们需要先了解下webpack 代码编译工具,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。
webpack
官方中文文档地址:
https://www.webpackjs.com/concepts/
Vue CLI 脚手架构建工具
Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,搭建交互式的项目脚手架,Vue CLI版本3.x开始包名称由vue-cli 改成了 @vue/cli, 如果你已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先通过 npm uninstall vue-cli -g 卸载后再安装3.x版本,Vue CLI 需要 Node.js 8.9 或更高版本 (推荐 8.11.0+)。
安装Vue CLI
在命令行输入:cnpm install -g @vue/cli (安装新包)
我们这里推荐用vue-cli 3.x构建项目,新版优化了编译速度,不过你也可以通过老版本创建项目,老版本安装命令:cnpm install --global vue-cli
备注:安装后,检查是否安装成功 。vue -V (在此注意V为大写,也可以用vue --version)
创建一个项目
运行以下命令来创建一个新项目:
vue create hello-world
项目构建完成后,会在当前目录下创建hello-world项目文件夹。
$ cd hello-world
$ npm run serve
第一项为默认创建项目,默认的设置非常适合快速创建一个新项目的原型,这里我们选择第二项手动创建项目,按回车继续。
手动设置则提供了更多的选项,通过上下键选择所需的包按空格键选中后,按回车继续创建项目。
创建完成后我们进入hello-world目录,输入npm run serve运行项目(老版本运行命令为npm run dev)。
看到以上提示说明项目成功创建运行了,现在可以通过浏览器打开http://localhost:8080来访问我们网站了。
打开项目
我们通过Visual Studio Code工具打开项目,文件 - 打开文件夹,选中我们创建的项目hello-world
目录结构:
├── public # 静态资源
│ │── favicon.ico # favicon图标
│ └── index.html # html模板
├── src # 源代码
│ ├── assets # 主题 字体等静态资源
│ ├── components # 全局公用组件
│ ├── router # 路由
│ ├── store # 全局 store管理
│ ├── views # views 所有页面
│ ├── App.vue # 入口页面
│ └── main.js # 入口文件 加载组件 初始化等
├──.browserslistrc # 浏览器兼容性
├── .eslintrc.js # eslint 配置项
├── babel.config.js # babel 配置项
└── package.json # package.json
package.json
每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息。
{ "name": "hello-world", //npm包名称 "version": "0.1.0", //npm包版本 "description": "h-gx前端UI框架", //npm包描述 "author": "h_gxi@foxmail.com", //作者 "license": "ISC", //开源许可说明 "main": "main.js", "scripts": { //脚本命令 "serve": "vue-cli-service serve", //运行项目 "build": "vue-cli-service build", //编译打包 "lint": "vue-cli-service lint" // }, "dependencies": { //生产环境 请不要将测试或过渡性的依赖放到dependencies中 "core-js": "^3.3.2", "element-ui": "^2.12.0", "vue": "^2.6.10" }, "devDependencies": { //开发环境 "@vue/cli-plugin-babel": "^4.0.0", "@vue/cli-plugin-eslint": "^4.0.0", "@vue/cli-service": "^4.0.0", "babel-eslint": "^10.0.3", "eslint": "^5.16.0", "eslint-plugin-vue": "^5.0.0", "node-sass": "^4.13.0", "sass-loader": "^8.0.0", "uglifyjs-webpack-plugin": "^2.2.0", "vue-template-compiler": "^2.6.10" }, "eslintConfig": { "root": true, "env": { "node": true }, "extends": [ "plugin:vue/essential", "eslint:recommended" ], "rules": {}, "parserOptions": { "parser": "babel-eslint" } }, "postcss": { "plugins": { "autoprefixer": {} } }, "browserslist": [ "> 1%", "last 2 versions" ] }
vue.config.js
vue.config.js 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载。
const path = require('path') const CopyWebpackPlugin = require('copy-webpack-plugin') const UglifyJsPlugin = require('uglifyjs-webpack-plugin') const isDev = process.env.NODE_ENV === 'development' // 开发环境 // 打包输出路径 const outputDir = 'dist' module.exports = { outputDir: outputDir, // 部署应用包时的基本 URL publicPath: '/', // 端口 devServer: { port: 6220 }, // 默认情况下 babel-loader 会忽略所有 node_modules 中的文件。如果你想要通过 Babel 显式转译一个依赖,可以在这个选项中列出来。 transpileDependencies: ['element-ui'], // false生产环境下不打包map文件,true时可以看到所有源码。 productionSourceMap: false, // 如果这个值是一个对象,则会通过 webpack-merge 合并到最终的配置中。 configureWebpack: { plugins: [ /** * 复制nm-lib-skins/public目录下的文件到输出目录 */ new CopyWebpackPlugin([ { from: path.join(__dirname, 'public'), to: path.join(__dirname, outputDir), ignore: ['index.html'] } ]) ] }, // 是一个函数,会接收一个基于 webpack-chain 的 ChainableConfig 实例。允许对内部的 webpack 配置进行更细粒度的修改。 chainWebpack: config => { /** * 删除懒加载模块的 prefetch preload,降低带宽压力 * https://cli.vuejs.org/zh/guide/html-and-static-assets.html#prefetch * https://cli.vuejs.org/zh/guide/html-and-static-assets.html#preload * 而且预渲染时生成的 prefetch 标签是 modern 版本的,低版本浏览器是不需要的 */ config.plugins.delete('prefetch').delete('preload') /** * 设置index.html模板路径,默认public中的模板 */ config.plugin('html').tap(args => { args[0].template = './public/index.html' return args }) config // 开发环境 .when( isDev, // 转换过的代码(仅限行) https://webpack.docschina.org/configuration/devtool/ config => config.devtool('cheap-source-map') ) // 非开发环境 .when(!isDev, config => { config.optimization.minimizer([ new UglifyJsPlugin({ uglifyOptions: { // 移除 console // 其它优化选项 https://segmentfault.com/a/1190000010874406 warnings: false, compress: { drop_console: true, drop_debugger: true, pure_funcs: ['console.log'] } } }) ]) // 拆分 config.optimization.splitChunks({ chunks: 'all', cacheGroups: { elementUI: { name: 'chunk-element-ui', priority: 20, test: /[\\/]node_modules[\\/]element-ui(.*)/ } } }) config.optimization.runtimeChunk({ name: 'manifest' }) }) } }
cnpm install uglifyjs-webpack-plugin --save-dev
cnpm install -D sass-loader node-sass
cnpm i element-ui -S
目录导航
- Vue.js+vue-element搭建属于自己的后台管理模板:什么是Vue.js?(一)
- Vue.js+vue-element搭建属于自己的后台管理模板:Vue.js快速入门(二)
- Vue.js+vue-element搭建属于自己的后台管理模板:更深入了解Vue.js(三)
- Vue.js+vue-element搭建属于自己的后台管理模板:创建一个项目(四)
参考资料
Vue.js