1. 程式人生 > >webpack打包.vue文件

webpack打包.vue文件

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文件