webpack 从零到一入门(一)

……写在前面的话,希望要入门Webpack的小伙伴第一个就能搜到这篇文章,目前下的最新的版本是5.11.1
我的配置是:"webpack": "^4.41.6", "webpack-cli": "^3.3.11","webpack-dev-server": "^3.10.3"
后期学到webpack5,会不断的补充,一起学习吧

安装:

1.初始化项目
npm init
2.全局安装之后可以通过指令来调用
npm i webpack webpack-cli -g

webpack.config.js webpack 配置文件详解

作用:指示webpack 干哪些活 (运行webpack指令,会加载里面的配置)
所有的构建工具都是基于node.js平台运行的~模块化采用commonJs
loader: 1.下载 2.使用(配置loader)
plugins: 1.下载 2.引入 3.使用 npm i html-webpack-plugin -D

打包
  1. css 打包工具:style-loader、css-loader、less-loader、less
    安装方法:npm i '打包工具' -D
    注:less打包必须安装less-loader 和 less
  2. html 打包工具:html-webpack-plugin
    安装方法:npm i html-webpack-plugin -D
    使用:new htmlWebpackPlugin({ template: './src/index.html' })
  3. img图片打包:(待更新)
    处理样式中url图片(默认处理不了html中的img图片)下载 url-loader file-loader
    处理html文件的img图片:html-loader
  4. 打包其他资源(除了html/js/css以外的资源)
    使用:file-loader
优化(css提取,兼容性处理,压缩)

a.提取css成单独文件的插件: mini-css-extract-plugin
用法:const miniCssExtractPlugin = require('mini-css-extract-plugin')
b.压缩css插件: optimize-css-assets-webpack-plugin
用法:const optimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
c.css兼容性:loader: 'postcss-loader'
注:可能存在兼容性问题
解决:项目根目录下新建一个postcss.config.js文件

postcss.config.js文件
module.exports = {
    plugins: [
        // postcss插件
        require('postcss-preset-env')()
    ]
}
本地环境配置:devServer

开发服务器 devServer: 自动化(自动编译,自动打开浏览器,自动刷新浏览器)
特点: 只会在内存中编译打包,不会有任何输出到本地代码
启动devServer指令:webpack-dev-server
安装:npm i webpack-dev-server -D
本地启动:npx webpack-dev-server

package.json 浏览器配置

package.json 浏览器配置

"browserslist": {
        "development": [
            "last 1 chrome version",
            "last 1 firefox version",
            "last 1 safari version"
        ],
        "production": [
            ">0.2%",
            "not dead",
            "not op_mini all"
        ]
    }
webpack.config.js 文件
/*
    webpack.config.js webpack 配置文件
        作用:指示webpack 干哪些活 (运行webpack指令,会加载里面的配置)
        所有的构建工具都是基于node.js平台运行的~模块化采用commonJs
        loader: 1.下载 2.使用(配置loader)
        plugins: 1.下载 2.引入 3.使用      npm i html-webpack-plugin -D
*/
// resolve 用来拼接绝对路径的方法
const { resolve } = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
// 提取css成单独文件的插件
// mini-css-extract-plugin
const miniCssExtractPlugin = require('mini-css-extract-plugin')
// 压缩css插件:optimize-css-assets-webpack-plugin
const optimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')

// 设置 nodeJs 环境变量,方便开发者调试
process.env_NODE_ENV = 'development'



module.exports = {
    // webpack配置
    // 入口起点
    entry: './src/js/index.js',
    // 输出
    output: {
        // 输出文件名
        filename: 'js/built.js',
        // 输出路径
        // __dirname noidejs变量,代表当前文件的目录的绝对路径
        path: resolve(__dirname, 'build')
    },
    // loader 的配置(翻译)
    module: {
        rules: [
            // 详细的loader配置
            // 不同文件必须配置不同的loader
            {
                // 匹配哪些文件
                test: /\.css$/,
                // 多个loader处理用use
                use: [
                    // use数组中的loader执行顺序: 从右到左,从下到上 依次执行
                    // 创建style标签,将js中的样式资源插入进去,添加到head中生效
                    // 'style-loader',
                    // 取代style-loader,提取js中的css成单独文件
                    miniCssExtractPlugin.loader,
                    // 将css文件变成commonJs模块加载js中,里面内容是样式字符串
                    'css-loader',
                     {
                        loader: 'postcss-loader',
                        // options: {
                        //     indent: 'postcss',
                        //     plugins: () => [
                        //         // postcss的插件
                        //         require('postcss-preset-env')()
                        //     ]
                        // }
                    }
                ]
            },
            {
                test: /\.less$/,
                use: [
                    'style-loader',
                    'css-loader',
                    // 需要下载 less-loader 和 less
                    'less-loader'
                ]
            },
            {
                // 处理图片,样式中url图片
                // 问题:默认处理不了html中的img图片
                test: /\.(jpg|png|gif)$/,
                // 使用一个loader
                // 下载 url-loader file-loader
                loader: 'url-loader',
                options: {
                    // 图片大小小于8kb,就会被base64处理
                    // 优势: 减少请求(减轻服务器压力)
                    // 缺点: 图片体积会增大(文件请求更慢)
                    limit: 5 * 1024,
                    // 问题:url-loader默认使用es6模块化解析,而html-loader引入图片是commonJs
                    // 解析出现: [object Module]
                    // 解决:关闭url-loader的es6模块化,使用commonJs解析
                    // esModule: false,
                    // 给图片重命名
                    // [hash:10] 取图片的hash的前十位
                    // [ext] 取文件原来的扩展名
                    name: '[hash:10].[ext]'
                }
            },
            {
                test: /\.html$/,
                // 处理html文件的img图片(负责引入img,从而被url-loader进行处理)
                loader: 'html-loader',
            },
            // 打包其他资源(除了html/js/css以外的资源)
            {
                exclude: /\.(css|less|js|html|jpg|png|gif)/,
                loader: 'file-loader',
                options: {
                    name: '[hash:10].[ext]'
                }
            }
        ]
    },
    // plugins 插件配置
    plugins: [
        // 详细的plugins配置
        // html-webpack-plugin
        // 功能:默认会创建一个 html 文件,引入打包输出的所有资源(js/css)
        // 需求: 需要有结构的html文件
        new htmlWebpackPlugin({
            // 复制一个 './src/index.html' 文件,并自动引入打包输出的所有资源(js/css)
            template: './src/index.html'
        }),
       new miniCssExtractPlugin({
            //对输出的css文件进行重命名
            filename: 'css/built.css'
        }),
        // 压缩css
        new optimizeCssAssetsWebpackPlugin()
    ],
    mode: 'development', // 开发模式
    // mode: "production"
    // 开发服务器 devServer: 自动化(自动编译,自动打开浏览器,自动刷新浏览器)
    // 特点: 只会在内存中编译打包,不会有任何输出到本地代码
    // 启动devServer指令:webpack-dev-server
    // 安装:npm i webpack-dev-server -D
    // 本地启动:npx webpack-dev-server
    devServer: {
        contentBase: resolve(__dirname, 'build'),
        // 启动gzip压缩
        compress: true,
        // 端口号
        port: 3000,
        // 默认打开浏览器
        open: true
    },
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容