1. 程式人生 > >webpack 4.0搭建vue框架,入門學習

webpack 4.0搭建vue框架,入門學習

 俗話說一天不可以不學,今天就來學習一下,鼎鼎大名的webpack

      webpack的配置真的是讓人髮指的地步

   從這個坑中進入到另一個坑中,本篇文章可能有點長,請耐心看完

   眾所周知,webpack是依附於node.js 的,所以在使用webpack之前需要先下載一個node,

    安裝完node之後,接下來就是今天的主角

      1 安裝webpack

            開啟命令視窗 執行  

             npm webpack webpack-cli webpack-dev-server  -g

       2  安裝完成之後,你就可以小試一把

          建立檔案結構如下

           src

                 main.js

           dist

                 index.html

        結構完成之後,在根目錄下開啟命令視窗,

         webpack4 提供了兩個直接打包的方式分別是

               webpack  --mode=development      //用於開發環境    -》壓縮出來的較大

               webpack --mode=production    //用於生產環境   -》壓縮出來的較小

      執行完成之後,在dist資料夾中可以看到壓縮過後的js

     3 使用 webpack.div.js

          上面的部分只是給咱們提供了一些簡單的壓縮js方式

          在實際的開發中,我們需要壓縮css,html,lee等檔案還是需要loader的配合,所以還是需要用到webpack.div.js

          下面開始webpack.div.js的配置,以及踩坑過程    

          一、先寫出檔案結構

                config

                     webpack.div.js 

                dist

                      index.html

                 src

                       main.js

            二、配置壓縮js的結構 

webpack.div.js                

    var path = require('path')    //node系統模組

module.exports = {

          //入口檔案

entry: {
main: './src/main.js'

},

        // 壓縮模式

mode: 'development',

       //輸出配置

output: {
filename: '[name].js',    //輸出名字配置【name】為原來的名字
path: path.resolve(__dirname, '../dist')   //輸出的路徑
}
},

         module: {

            rules:[

          //用來載入loader

]

}

三   loader配置

        css

                需要下載兩個loader  

                          npm i css-loader style-loader

             在main中引入css  

                 require(./name.css) //一定加入./否則會報錯

           loader配置

                module: {
rules: [{
test: /\.css$/,
use: [{
loader: "style-loader"
},
{
loader: "css-loader"
}
]

}

                      }]

           需要注意css 在HTML中的引入,需要output配合

                  output: {
filename: '[name].js',
path: path.resolve(__dirname, '../dist'),
publicPath: '/'
},

         在HTML中寫入<script src="/main.js"></script>建議寫到html下面引入

      HTML

            需要下載三個loader

                   npm i file-loader html-loader extract-loader 

             檔案結構 

                          config 

                                   webpack.dev.js

                           dist

                           src

                                index.html

                                main.css

                                main.js

                config/webpack.dev.js 

                             var path = require('path')  //node系統模組

module.exports = {  //暴露
entry: {   //入口檔案
main: './src/main.js'
},
mode: 'development',  //開發模式 可使用production生產模式進行替換
output: {      //輸出
filename: '[name].js',   //輸出時檔名
path: path.resolve(__dirname, '../dist'),   //commonJs提供 檔名    -》輸出路徑
publicPath: '/'     //   html中的引入檔案路徑
},
devServer: {    //熱跟新
contentBase: 'dist',    //伺服器指向檔名。類似node中的靜態資源載入
overlay:true //報錯顯示到瀏覽器
},
module: { //loader配置
rules: [{
test: /\.css$/,   // 正則css
use: [{
loader: "style-loader"   //渲染
},
{
loader: "css-loader"    //壓縮
}
]
},
{
test: /\.html$/,  //正則 所有的html
use: [{
loader: "file-loader",  //檔案輸出
options: {  //名字
name: "[name].html"
}
},
{
loader: "extract-loader"  //與main.js分離,打包成一個獨立的檔案
},
{
loader: "html-loader",  //渲染,壓縮
options: {
attrs: ["img:src"]
}
}
]
}

}

   src/index.html

 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>

</head>
<body>
<div id="box">

</div>
</body>
<script src="/main.js"></script>

</html>

    main/main.js程式碼

          requrie('./main.css')

          requrie('./html.css')

   三,圖片

         html中正常引入

        在loader配置中加入

{
test: /\.(jpg|git|png)$/,   //圖片
use: [{
loader: "file-loader",
options: {
name: "[name]-[hash:8].[ext]"  //壓縮為一個名字8位雜湊值的圖片
}
}]
}

   -----------------------------------------------------------------------------------------------------------

  以上屬性webpack的基本操作,下面使用webpack實現vue開發環境的搭建

              檔案結構

                    config

                             webpack.dev.js

                    dist

                              index.html

                    ser

                            main.js

                            app.vue

          config/webpack.dev.js

                       var path = require('path')  //node系統模組
const VueLoaderPlugin = require('vue-loader/lib/plugin'); //vue-loader 伴生外掛 
module.exports = {  //暴露
entry: {   //入口檔案
main: './src/main.js'
},
mode: 'development',  //開發模式 可使用production生產模式進行替換
plugins: [
new VueLoaderPlugin()   //vue-loader的VueLoaderPlugin
],
output: {      //輸出
filename: '[name].js',   //輸出時檔名
path: path.resolve(__dirname, '../dist'),   //commonJs提供 檔名    -》輸出路徑
publicPath: '/'     //   html中的引入檔案路徑
},
devServer: {    //熱跟新
contentBase: 'dist',    //伺服器指向檔名。類似node中的靜態資源載入
overlay:true //報錯顯示到瀏覽器
},
resolve: {    //引入vue.js
alias: {
'vue$': 'vue/dist/vue.js'
}
}, 
module: { //loader配置
rules: [{
test: /\.css$/,   // 正則css
use: [{
loader: "style-loader"   //渲染
},
{
loader: "css-loader"    //壓縮
}
]
},
{
test: /\.html$/,  //正則 所有的html
use: [{
loader: "file-loader",  //檔案輸出
options: {  //名字
name: "[name].html"
}
},
{
loader: "extract-loader"  //與main.js分離,打包成一個獨立的檔案
},
{
loader: "html-loader",  //渲染,壓縮
options: {
attrs: ["img:src"]
}
}
]
},
{
test: /\.(jpg|git|png)$/,   //圖片
use: [{
loader: "file-loader",
options: {
name: "[name]-[hash:8].[ext]"  //壓縮為一個名字8位雜湊值的圖片
}
}]
},
{
test: /\.vue$/,   //壓縮vue
use: [{
loader: "vue-loader"  //壓縮vue的loader
}],
exclude: '/node_modules/'    // 排除壓縮的檔案
}
]
}

}

dist/index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>

</head>
<body>
<div id="box">
<app></app>
</div>
</body>
<script src="/main.js"></script>

</html>

src/app.vue

<template>
<div>
我是{{a}}  
</div>
</template>


<script>
export default {
name: 'app',
data:function(){
return {
a:'小渣渣'
}
}
}
</script>


<style>

</style>

ser/main.js

 import Vue from 'vue'
 import app from "./app.vue"

new Vue({
   el:'#box',
    components:{
    app
    }
   }

)