初始化npm。
npm init -y
![](https://i-blog.csdnimg.cn/blog_migrate/a5e61f21e02262104ee2e72e71320aa5.png)
npm安装vue。
npm install vue --save-dev
![](https://i-blog.csdnimg.cn/blog_migrate/321000800666d93435276cbcd95522bb.png)
npm安装vue相关编译器
npm i vue-loader vue-template-compiler --save-dev
![](https://i-blog.csdnimg.cn/blog_migrate/540383e6263df9b5c94d8f1fbc2c6d4b.png)
npm安装babel
npm install @babel/cli @babel/core @babel/preset-env @babel/preset-react babel-loader --save-dev
![](https://i-blog.csdnimg.cn/blog_migrate/f7367e1f97d314a5914468bd07ffc276.png)
npm安装webpack。
npm install webpack webpack-cli webpack-dev-server --save-dev
![](https://i-blog.csdnimg.cn/blog_migrate/bd03ce683e7c82d7ee5a5d3a620b366e.png)
npm安装webpack插件:
npm install html-webpack-plugin open-browser-webpack-plugin --save-dev
![](https://i-blog.csdnimg.cn/blog_migrate/b94dd4339164f29750810b4b2165eab4.png)
npm安装CSS、Sass
npm install sass-loader css-loader style-loader --save-dev
![](https://i-blog.csdnimg.cn/blog_migrate/c3f01f96c8aa9159825935d5a4a2712e.png)
查看安装地依赖:
npm list --depth 0
![](https://i-blog.csdnimg.cn/blog_migrate/00f2e771ab24858dd883739b361243ff.png)
相关文件
![](https://i-blog.csdnimg.cn/blog_migrate/acf1679903dcfcc2e0c68cc71a85ddec.png)
webpack配置webpack.config.js:
const path = require('path')
const HtmlWebPackPlugin = require('html-webpack-plugin')
const OpenBrowserPlugin = require('open-browser-webpack-plugin')
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const webpack = require('webpack')
module.exports = {
entry: './index.js',
output: {
path: path.join(__dirname, 'dist'),
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.jsx?/,
// 排除 node_modules 目录下的文件,防止被打抱
exclude: path.resolve(__dirname, 'node_modules'),
use: {
loader: 'babel-loader',
options: {
babelrc: false,
presets: [
require.resolve('@babel/preset-react'),
[require.resolve('@babel/preset-env', {module: false})],
],
}
}
},
{
test: /\.vue$/,
use: ['vue-loader'],
},
]
},
plugins: [
new VueLoaderPlugin(),
new HtmlWebPackPlugin(),
new OpenBrowserPlugin({
url: 'http://localhost:8080'
}),
new webpack.HotModuleReplacementPlugin(),
],
devServer: {
hot: true
}
};
app.vue
<template>
<div>{{message}}</div>
<button v-on:click='hi'>hi</button>
</template>
<script type="text/javascript">
export default {
data() {
return {
message: 'hello vue'
}
},
methods: {
hi(){
alert('hi');
}
},
beforeCreate: function(){
console.log('创建之前');
},
created: function(){
console.log('创建');
},
beforeMount: function(){
console.log('挂载之前');
},
mounted: function(){
console.log('挂载');
},
}
</script>
测试js
import Vue from 'vue'
import app from './app.vue'
const root = document.createElement('div');
document.body.appendChild(root)
Vue.config.productionTip = false;
new Vue({
render: (h) => h(app)
}).$mount(root);
测试页面index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>webpack</title>
</head>
<body>
<script type="text/javascript" src="dist/bundle.js"></script>
</body>
</html>
文件目录
![](https://i-blog.csdnimg.cn/blog_migrate/5edc047b9021a65fe216f72ac4c63c05.png)
编译
webpack
![](https://i-blog.csdnimg.cn/blog_migrate/64666810c994b153615f7f04b869ebad.png)
![](https://i-blog.csdnimg.cn/blog_migrate/81003d9d4455052d632696f4305f317f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/187ef02b40e3632b26b0857c8abc1df2.png)
webpack-dev-server服务器上部署
webpack-dev-server
![](https://i-blog.csdnimg.cn/blog_migrate/6a93962cea7ac8dfbd508fc4cc7d2ff4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/644473ab8986c6bd5c9476c2b6742bf6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/095be05eae1caf9f73c95780bf351c95.png)