打包

vuecli 基于 與webpack的關系

為什么要打包?

互聯(lián)網項目盡量減少加載時間,提高用戶體驗,需要打包
-打包:文件壓縮

什么是webpack?

-打包工具 還有gulp grant
-通過mian.js 將 js css *.vue文件裝載入 webpack 生成css js html 壓縮、混淆、合并 然后輸出dist 常用的裝載器

npm init -y 生成package.json
npm i -S webpack webpack-cli
npx webpack 開始打包
webpack 默認打包文件 webpack.config.js

webpack-dev-server

-前端文件當做一個http 容器訪問
npm i -S webpack-dev-server
npx webpack-dev-server 啟動服務

let path =require('path') //path來自node
let HtmlWebpackPlugin=require('html-webpack-plugin')
module.exports={ //node模塊化的寫法
    entry:'./src/main.js', //入口文件
    mode:"development",//開發(fā) 發(fā)布production
    output:{                //出口文件
        filename:'main.js',
        path:path.resolve(__dirname,"dist")        
    },
    devServer:{//web服務配置
        port:8081,
        open:true,//服務打開時自動打開瀏覽器
        progress:true,
        contentBase:'./dist' //http容器的根目錄
    },
    plugins:[
        new HtmlWebpackPlugin({
            template:'./src/index.html',
            filename:'index.html'
        })
    ]
}

把打包后的js添加在html中

plugins--------安裝 npm i -D html-webpack-plugin
將打包后的js 是自動添加到html

多個文件js

在入口js中
let a=require("./a.js")

項目發(fā)布啟動打包的dist

npm i -g server 安裝
server dist

CSS打包

寫在入口文件main.js,因為 webpack是以js為基礎
require(index.css)
webpack默認不支持css打包,若要支持需要css-loader
npm i -S css-loader
-css 只是裝載css,不會放在HTML
-style-loader 作用是放在html

loader執(zhí)行循序從右向左

-loader裝載器,裝載并轉換(css,vue,less,scss,)
-plugin,文件的處理(壓縮,混淆,合并等)

less less-loader 裝載less并轉換css

npm i -S less less-loader

 module:{
        rules:[
            {
                test:/\.css$/,//以css結尾
                use:['style-loader','css-loader']
            },
            {
                test:/\.less$/,
                use:['style-loader','css-loader','less-loader']
            }
        ]
    },

css 文件壓縮

mini-css-extract-plugin 抽取文件

js 、css壓縮處理

js 壓縮插件 terser-webpack-plugin
css壓縮 optimize-css-assets-webpack-plugin

let MiniCssExtractPlugin=require('mini-css-extract-plugin')
let TerserPlugin=require('terser-webpack-plugin')
let OptimizeCssPlugin=require('optimize-css-assets-webpack-plugin')

optimization:{//壓縮js,css
        minimizer:[new TerserPlugin({}),new OptimizeCssPlugin({})]
    },
module:{
        rules:[
            {
                test:/\.css$/,//以css結尾
                use:[MiniCssExtractPlugin.loader,'css-loader']
            },
            {
                test:/\.less$/,
                use:[MiniCssExtractPlugin.loader,'css-loader','less-loader']
            }
        ]
    },
 plugins:[
        new HtmlWebpackPlugin({//html
            template:'./src/index.html',
            filename:'index.html'
        }),
        new MiniCssExtractPlugin({//css
            filename:"index.css"
        })
    ]

版本過高如何降低版本 npm i -S terser-webpack-plugin@2

刪除依賴包 rm -rf node_modules\

es6打包支持

babel-loader 轉換器(es6\es7)
node支持部分es6

npm i -S babel-loader @babel/core

全局變量

jquery $ 遍歷dom
工具:underscord lodash(防抖節(jié)流)
在每一個組建中都可以使用它

main.js中導入 import $ from 'jquery'(可以去掉)
npm i -S jquery

使用全局變量,可以在組建中使用wepack.providePlugin (導入全部局變量)

導入后由于三方包過大,需要把三方包排出去

三方包拆開好處:1、分開加載 2、緩存

圖片的處理

file-loader (默認使用Es6的模塊化,通過配置esModule:false 禁止默認)
js中使用圖片
css中使用圖片

html中使用圖片 需要 html-withimg-loader

把小圖片轉化成base64 , url-loader [ base64會讓圖片變大,一般轉為小圖片 ]

 {
                test: /\.(png|jpg)$/,
                use: {
                    loader: 'url-loader',
                    options: {
                        esModule: false,
                        limit: 200*1024 //小于800kb圖片都轉成base64
                    }
                }
                // use: {
                //     loader: 'file-loader',
                //     options: {
                //         esModule: false
                //     }
                // }
            },

模塊化

node commonjs
es6 模塊化 有個default

樣式的兼容性問題

樣式兼容性插件就是給樣式自動添加前綴
postcss-loader

 {
                test:/\.css$/,//以css結尾
                use:[MiniCssExtractPlugin.loader,'css-loader','postcss-loader']
            },
            {
                test:/\.less$/,
                use:[MiniCssExtractPlugin.loader,'css-loader','postcss-loader','less-loader']
            },

在根目錄添加postcss.config.js 需要一個 autoprefixer

module.exports={
    plugins:[
        require('autoprefixer')
    ]
}

還需要在package.json添加[瀏覽器列表]

"browserslist":[
    "> 1%",
    "last 100 versions", //表示瀏覽器的版本號
    "not ie<=8"
  ]
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容