提示:webpack构建Vue项目
文章目录
前言一、先看项目结构二、使用步骤1、创建项目二、初始化项目1. npm inti -y 初始化管理项目2. npm i ( 下载 package.json 的依赖到项目里)3. index.jsp 文件删掉,编写index.html文件
三、配置文件1、根目录下创建webpack.config.js2、配置main.js 文件3. router包下创建index.js 配置路由4. views 包下创建视图5. 根目录下创建App.vue6. 控制台输入命令 npm run serve7. 运行整个 JavaWeb项目(项目名: webpack_vue_dome)8. 效果
总结
前言
提示:上一篇写的是webpack构建Vue的脚手脚:
不知道各位道友有没有出错的,但是我在结合使用elementUI的时候是出错的,所以又整了这么一篇,有大神的话希望能够指点一下我还有什么缺少的配置。
一、先看项目结构
dist: 使用webpack打包后的文件
// 这里面的文件会在打包的时候进行清空和加载,不需要去管
node_modules: 下载的依赖所在的包
router: Vue 路由的配置文件
// 配置项目路由的一个index.js 文件
views: Vue 的其他视图
index.html : 页面模板,Vue是单页面组件开发
// 只有一个div, id 为 app
main.js: js 文件的入口文件
// 配置挂载, router, 以及其他资源
package.json: 大版本的依赖信息
package-lock.json: 下载的依赖信息
webpack.config.js: webpack 打包的配置文件
二、使用步骤
上面的结构是我测试成功的一个项目结构,下面就从头开始一步一步来构建,因为我这里是直接构建,就不解释其他的用法了。
1、创建项目
先说运行的方式,因为JavaWeb项目使用到Tomcat 服务器,而JavaWeb项目我使用Maven的骨架创建。 安装插件: Maven Helper pom.xml 添加依赖
// tomcat 依赖
运行方式:
二、初始化项目
1. npm inti -y 初始化管理项目
提示: 要到webapp 之下运行命令 会生成 package.json 文件,顺便把一些基本的目录构建了
在这里直接将我的 package.json 的依赖复制到你的 package.json 里面。再运行命令
2. npm i ( 下载 package.json 的依赖到项目里)
package.json 代码如下(示例):
// 主需要将 "scripts":、 "dependencies":、 "devDependencies": 内容复制即可,其他是自己的,不需要更改
{
"name": "webapp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"serve": "webpack --mode=development --watch",
"build": "webpack --mode=production"
},
"dependencies": {
"axios": "^0.22.0",
"default-passive-events": "^2.0.0",
"element-ui": "^2.15.6",
"vue": "^2.6.14",
"vue-router": "^3.5.2"
},
"devDependencies": {
"@babel/core": "^7.15.5",
"@babel/preset-env": "^7.15.6",
"@vue/cli-plugin-babel": "^5.0.8",
"babel-loader": "^8.2.2",
"babel-plugin-component": "^1.1.1",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-es2015": "^6.24.1",
"babel-runtime": "^6.26.0",
"css-loader": "^6.3.0",
"file-loader": "^6.2.0",
"html-webpack-plugin": "^5.5.0",
"less-loader": "^11.0.0",
"sass": "^1.42.1",
"sass-loader": "^12.1.0",
"style-loader": "^3.3.0",
"stylus-loader": "^7.0.0",
"url-loader": "^4.1.1",
"vue-hot-reload-api": "^2.3.4",
"vue-html-loader": "^1.2.4",
"vue-loader": "^15.9.8",
"vue-style-loader": "^4.1.3",
"vue-template-compiler": "^2.6.14",
"webpack": "^5.56.0",
"webpack-cli": "^4.8.0"
},
"keywords": [],
"author": "",
"license": "ISC"
}
3. index.jsp 文件删掉,编写index.html文件
index.html
三、配置文件
1、根目录下创建webpack.config.js
提示: index.jsp我这里忘记删掉了,运行成功才后知后觉删的,不影响。
webpack.config.js 内容
// 将一下内容直接复制到创建的webpack.config.js 文件里(照着我的步骤走的话)
// 如果不是,就只需要注意路径的配置即可
const path = require('path')
const { VueLoaderPlugin } = require('vue-loader')
const HtmlWebpackPlugin = require("html-webpack-plugin");
// 设置入口和出口
module.exports = {
entry: './main.js', // 入口文件
output: { // 出口文件
path: path.resolve(__dirname, 'dist'), // 打包的文件路径
filename: 'bundle.js', // 打包的文件名
clean: true, // 自动将上次打包目录资源清空
},
// 文件转换,模块的打包规则
module: {
rules: [
{ test: /\.vue$/, use: 'vue-loader'},
{ test: /\.s[ac]ss$/, use: [ 'style-loader, css-loader, sass-loader' ] },
{
test: /\.m?js$/,
use: {
loader: 'babel-loader', // 这个插件会将js 的新语法转换成老语法,进行json转换
options: {
presets: [ '@babel/preset-env' ],
},
},
},
// 处理图片的配置, 老语法
// { test: /\.(png|jpe?g|gif|svg|webp)$/, use: { loader: 'file-loader', options: { esModule: false } } },
// 新语法
//{ test: /\.(png|jpe?g|gif|svg|webp)$/, type: 'asset/resource'},
{
test: /\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
type: "asset",
parser: {
dataUrlCondition: {
maxSize: 10 * 1024 // 小于10kb的图片会被base64处理
}
}
},
{
test: /\.css$/,
use: [
'style-loader',
'vue-style-loader',
'css-loader'
],
},
// less
{
test: /\.less$/,
use: ["style-loader", "css-loader", "less-loader"],
},
// stylus
{
test: /\.styl$/,
use: ["style-loader", "css-loader", "stylus-loader"],
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
},
],
},
// 插件的位置, plugins是一个数组, 配置插件
plugins: [
// new 一个插件实例
new VueLoaderPlugin(),
new HtmlWebpackPlugin({
// 以 public/index.html 为模板创建文件
// 新的html文件有两个特点:1. 内容和源文件一致 2. 自动引入打包生成的js等资源
template: path.resolve(__dirname, "./index.html"),
}),
],
// 热加载
resolve: {
alias: {
'vue$': 'vue/dist/vue.esm.js'
},
extensions: ['*', '.js', '.vue', '.json']
},
}
2、配置main.js 文件
main.js 文件内容
import Vue from "vue";
import App from './App.vue'; // 导入根目录下的App.vue ,注意点就是要把后缀名.vue补齐,其他文件也是
import router from "./router"; // 导入的router 是 router包下index.js 导出的router 对象,下面再写上
// elementUI
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
// Added non-passive event listener to a scroll-blocking 'mousewheel' event 错误引入
import 'default-passive-events'
Vue.use(ElementUI) // 注册ElementUI
Vue.config.productionTip = false
new Vue({
el: "#app", // 挂载的是 index.html的 div id app
router, // 挂载路由
render: h => h(App), // 将内容渲染到App.vue上
})
3. router包下创建index.js 配置路由
index.js 内容
import Vue from "vue"; // 先导入 Vue
import VueRouter from "vue-router"; // 再导入 VueRouter
import Aside from '../views/Aside.vue' // 组件 Aside , 是在views包下创建的Aside.vue 文件, 不是elementUI的组件
import Header from '../views/Header.vue' // Header 组件, 同样引入需要补齐后缀名 .vue
// 注册路由
Vue.use(VueRouter)
const router = new VueRouter({
routes: [
{ path: '/', component: Aside }, // 配置路由对象
{ path: '/Header', component: Header },
]
})
export default router; // 导出路由对象
4. views 包下创建视图
Aside.vue
Aside组件
export default {
name: "Aside",
}
Header.vue , 去elementUI 官网把这个整个复制粘贴到Header.vue 上
5. 根目录下创建App.vue
App.vue
export default {
name: "App.vue"
}
6. 控制台输入命令 npm run serve
到这一步就已经差不多大功告成了.
控制台这样的样式说明成功的,webpack 运行没有错误
7. 运行整个 JavaWeb项目(项目名: webpack_vue_dome)
使用Maven 依赖的tomcat 启动
8. 效果
总结
至此结束,剩下的就开始肝代码了。
精彩文章
发表评论