webpack打包.vue文件
阿新 • • 發佈:2019-05-02
spa 自定義 4.3 rep rds 文件配置 ins ash htm
在webpack中配置.vue組件頁面的解析(vue-loader)
結合webpack使用vue-router
在webpack中配置.vue組件頁面的解析
1、運行npm i vue -S將vue安裝為運行依賴;
2、運cnpm i vue-loader vue-template-compiler -D將解析轉換vue的包安裝為開發依賴;
3、運行npm i style-loader css-loader -D將解析轉換CSS的包安裝為開發依賴,因為.vue文件中會寫CSS樣式;
4、new VueLoaderPlugin() 引入這個插件,必須的
ps:註意 引入const VueLoaderPlugin = require(‘vue-loader/lib/plugin’) ———在之前的版本中好像不需要這個插件,再看教程的時候還是跟著官方文檔來 vue-loader
webpack.config.js
const path = require(‘path‘);
const HtmlWebpackPlugin = require(‘html-webpack-plugin‘);//自動生成html模板,以便在多個入口文件時,不用手動修改引入的js
const webpack = require(‘webpack‘);
const VueLoaderPlugin = require(‘vue-loader/lib/plugin‘);
module.exports = {
entry: {
app: ‘./src/app.js‘,
index: ‘./src/index.js‘,
main: ‘./src/main.js‘,
},
devServer: {//使用觀察者模式(啟動一個服務器,當文件有變動時,頁面立即改變)
contentBase: path.join(__dirname, "dist"),//將dist目錄設置為可訪問文件
compress: true,//一切服務都啟用gzip 壓縮
port: 9000,//指定服務器監聽的端口 8080:為默認端口
hot: true,//告訴服務器,正在使用模塊熱替換
},
devtool: ‘inline-source-map‘,//若有報錯,報錯信息會具體到某一個js文件的某一行
plugins: [//配置html-webpack-plugin
new HtmlWebpackPlugin({
title: ‘這個是html模板‘,
template: ‘index.html‘,//配置html模板
inject:true, //是否自動在模板文件添加 自動生成的js文件鏈接
minify:{
removeComments:true //是否壓縮時 去除註釋
}
}),
new webpack.NamedModulesPlugin(),//模塊熱替換相關
new webpack.HotModuleReplacementPlugin(),//模塊熱替換相關
new VueLoaderPlugin(),// 請確保引入這個插件來施展魔法
],
output: {
filename: ‘[name].bundle.js‘,//打包後文件的名字
path: path.resolve(__dirname, ‘dist‘),//打包後文件的輸出目錄
},
module: {
rules: [
{//引入vue-loader識別.vue文件
test: /\.vue$/,
use:[
‘vue-loader‘
]
},
{//打包css文件(可以用import在js中引入css文件)
test: /\.css$/,
use: [
‘style-loader‘,
‘css-loader‘
]
},
{//加載圖片(js或css中引入圖片時)
test: /\.(png|svg|jpg|gif)$/,
use: [
{
loader: ‘file-loader‘,
options:{
name: ‘[path][name].[ext]‘,//配置自定義文件模板
outputPath: ‘.‘,//配置打包後的輸出目錄(.代表在dist目錄中生成)
}
}
]
},
{//加載字體
test: /\.(woff|woff2|eot|ttf|otf)$/,
use: [
{
loader:‘file-loader‘,
options:{
name: ‘[path][name].[ext]‘,//配置自定義文件模板
outputPath: ‘.‘,//配置打包後的輸出目錄(.代表在dist目錄中生成)
}
}
]
},
{//加載數據之csv與tsv
test: /\.(csv|tsv)$/,
use: [
‘csv-loader‘
]
},
{//加載數據之xml json不用配置就可以直接加載
test: /\.xml$/,
use: [
‘xml-loader‘
]
}
]
}
};
package.json
{
"name": "vueOrigin",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "webpack-dev-server --open",
"build": "webpack",
"dev": "webpack"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"css-loader": "^2.1.1",
"csv-loader": "^3.0.2",
"file-loader": "^3.0.1",
"html-webpack-plugin": "^3.2.0",
"style-loader": "^0.23.1",
"vue-loader": "^15.7.0",
"vue-template-compiler": "^2.6.10",
"webpack": "^4.30.0",
"webpack-cli": "^3.3.1",
"webpack-dev-server": "^3.3.1",
"xml-loader": "^1.2.1"
},
"dependencies": {
"vue": "^2.6.10",
"vue-router": "^3.0.6"
}
}
main.js入口文件
import Vue from ‘vue‘;//導入vue.js import App2 from ‘../app2.vue‘;//引入App2組件 import router from "../router/app2Router.js"; new Vue({ el:"#app2", router: router, template:"<App2/>", components: { App2 }, render: h => h(App2),//將App2組件渲染在#app2元素上(.vue文件必須通過reader函數轉化為函數形式渲染) data:{}, created(){}, mounted(){}, })
index.html
<div id="app2"></div>
引入vue-router
npm i vue-router -S
在根文件下建立一個 router/app2Router.js文件
import Vue from ‘vue‘;
import Router from ‘vue-router‘;
Vue.use(Router);
export default new Router({
routes:[
{//app2實例首頁
path: ‘/‘,
name: ‘App2‘,
component: () =>
import (‘../app2.vue‘)
},
]
})
然後將這個router.js文件配置到vue實例裏面,見上面的main.js
webpack打包.vue文件