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
来源:oschina
链接:https://my.oschina.net/u/4361197/blog/3361491