16.實戰技巧:優雅打包第三方類庫

目錄

說明

import $ from 'jquery';//普通的局部引用

在webpack插件中全局引用
    // ProvidePlugin是一個webpack自帶的插件,Provide的意思就是裝備、提供。由於ProvidePlugin是webpack自帶的插件,因此要先再webpack.config.js中引入webpack。
           new webpack.ProvidePlugin({
                $:"jquery"
            }),

webpack.config.js配置目錄

// node中的引入路徑模塊
const path = require('path');
// 檢查html模板,因此咱們須要引入node的glob對象使用 配合purifycss-webpack使用 查找
const glob = require('glob');
// 引入webpack
const webpack = require('webpack');
// 打包html
const htmlPlugin = require('html-webpack-plugin');
// 壓縮js
const uglify = require('uglifyjs-webpack-plugin');
// 從js中分離css插件
const extractTextPlugin = require("extract-text-webpack-plugin");
// 消除無用的css 好比你寫一個#demo 若是頁面沒有這個id 則會被消除
const PurifyCSSPlugin = require("purifycss-webpack");
//若是你說我想看一下傳過來的值究竟是什麼?能夠用下面的輸出語句。
console.log( encodeURIComponent(process.env.type) );
// 爲處理路徑 設置一個 絕對路徑
if(process.env.type== "build"){
    var website={
        publicPath:"http://baidu.com:9090/"
    }
}else{
    var website={
        publicPath:"http://192.168.1.101:9080/"
    }
}
module.exports = {
    //入口文件的配置項
    entry: {
        entry: './src/js/entry.js'
    },
    //出口文件的配置項
    output: {
        //輸出的路徑,用了Node語法
        path: path.resolve(__dirname, 'dist'),
        //輸出的目錄以及文件名稱
        filename: 'js/bundle.js',
        // 處理分離後css路徑對不上問題
        publicPath: website.publicPath
    },
    //模塊:例如解讀CSS,圖片如何轉換,壓縮
    module: {
        rules: [
            {
                // 用於匹配處理文件的擴展名的表達式,這個選項是必須進行配置的;
                test: /\.css$/,
                //  引用分離css的plugin
                use: extractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: [{
                            loader: 'css-loader',
                            options: {
                                importLoaders: 1
                            }
                        },
                        // 給css加前綴
                        'postcss-loader'
                    ]
                })

            },

            {
                test: /\.(png|jpg|gif)/,
                // 指定使用的loader和loader的配置參數
                use: [{
                    loader: 'url-loader',
                    options: {
                        // 把小於500000B(488kb)的文件打成Base64的格式,寫入JS 小於則幫你複製圖片過去並引入
                        // limit:500000
                        // 如今是以圖片形式引入
                        limit: 50,
                        // 指定圖片輸出的目錄
                        outputPath: 'images/'
                    }
                }]
            },
            {
                test:/\.(jsx|js)$/,
                use:{
                    loader:'babel-loader',
                },
                // 排除目錄選項
                exclude:/node_modules/
            }
        ]
    },
    //插件,用於生產模版和各項功能
    plugins: [
    // ProvidePlugin是一個webpack自帶的插件,Provide的意思就是裝備、提供。由於ProvidePlugin是webpack自帶的插件,因此要先再webpack.config.js中引入webpack。
           new webpack.ProvidePlugin({
                $:"jquery"
            }),
        // new uglify(),
        new htmlPlugin({
            // 是對html文件進行壓縮,removeAttrubuteQuotes是卻掉屬性的雙引號
            minify: {
                removeAttributeQuotes: true
            },
            // 爲了開發中js有緩存效果,因此加入hash,這樣能夠有效避免緩存JS
            hash: true,
            // 是要打包的html模版路徑和文件名稱
            template: './src/index.html'

        }),
        // 從js中分離css   /css/index.css是設置分離後的路徑 除此以外還要修改css-loader的寫法  
        // 分離出來後圖片路徑不對  用publicPath解決 在output中設置
        new extractTextPlugin("css/index.css"),
        // 消除無用的css 
        new PurifyCSSPlugin({
            // 路徑掃描
            paths: glob.sync(path.join(__dirname, 'src/*.html')),
            })
    ],
    //配置webpack開發服務功能
    devServer: {
        //設置基本目錄結構
        contentBase: path.resolve(__dirname, 'dist'),
        //服務器的IP地址,能夠使用IP也能夠使用localhost
        host: '192.168.1.101',
        //服務端壓縮是否開啓
        compress: true,
        //配置服務端口號
        port: 9006
    }
}

package.js依賴項

{
  "name": "xz",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.js",
  "scripts": {
    "start": "webpack-dev-server",
    "server": "webpack-dev-server --open",
    "dev": "set type=dev&webpack",
    "build": "set type=build&webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "autoprefixer": "^7.1.6",
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-preset-env": "^1.6.1",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "css-loader": "^0.28.7",
    "extract-text-webpack-plugin": "^3.0.1",
    "file-loader": "^1.1.5",
    "html-webpack-plugin": "^2.30.1",
    "postcss-loader": "^2.0.8",
    "purify-css": "^1.2.5",
    "purifycss-webpack": "^0.7.0",
    "style-loader": "^0.19.0",
    "url-loader": "^0.6.2",
    "webpack": "^3.8.1",
    "webpack-dev-server": "^2.9.3"
  },
  "dependencies": {
    "jquery": "^3.2.1"
  }
}

打包命令

npm start 或者 npm run server開發環境 

打實體文件夾包
npm run build 生產環境

npm run dev 開發環境
相關文章
相關標籤/搜索