淘先锋技术网

首页 1 2 3 4 5 6 7

webpack之webpack.config.js配置

wbepack.config.js webpack的配置文件详解:

作用: 指示 webpack 干那些活(当你运行 webpack 指令时, 会加载里面的配置)

所有构建工具都是基于node.js平台运行的~模块化默认采用commonjs,

概念:我们创建的src文件是我们写项目的源代码,用的是ES6模块化

而wbepack.config.js文件是我们写配置的源代码,默认用的是commonjs
 

使用webpack配置文件进行打包

首先在我们原来的webpack-dome项目中创建一个webpack.config.js文件

在这里插入图片描述

然后就可以在webpack.config.js文件中写配置代码, 代码内容如下:

const path = require('path') // 引用path模块
module.exports = {  // 这里是commrnt.js语法
    // 入口文件
    entry:"./src/index.js",
    // 打包后的出口文件
    output:{
        // 输出的路径  是绝对路径(导入path模块) 这里是用node来做的
        path:path.resolve(__dirname,'build'),
        // 输出的文件名称
        filename:'build.js',
    },
    // 使用开发模式打包
    mode:"development"
}
/*
    npm安装时-S -D作用及区别:
        -S 即--save(保存)
        包名会被注册在package.json的dependencies里面,在生产环境下这个包的依赖依然存在
        -D 即--dev(生产)
        包名会被注册在package.json的devDependencies里面,仅在开发环境下存在的包用-D,如babel,sass-loader这些解析器

        打包是在npm上运行命令, 一般来说你在配置完成 webpack.config.js 后,你打包时执行的命令是webpack ,但你也可以执行 npm run build 来进行打包,
        如何实现: 在package.json中的scripts下多加一行 "build": "webpack" ,就可以使用 npm run build
        他们的区别:
            在终端直接执行webpack命令,使用的是全局安装的webpack,
            当在package.js中定义了scripts时, 其包含了webpack命令,那么使用的是局部的webpack 
            
        运行命令
        开发环境: webpack ./src/index.js -o ./build/build.js --mode=development
        生产环境: webpack ./src/index.js -o ./build/build.js --mode=production
        添加能使css一起打包的插件: npm i css-loader style-loader -D
        添加能使scss一起打包的插件: npm install sass-loader node-sass webpack -D  因为你刚刚下载过 css-loader style-loader所以不用再次下载了
        添加能使html一起打包的插件: npm i html-webpack-plugin -D
        添加能使图片打包的插件: npm i url-loader file-loader -D
        添加能使html中图片打包的插件: npm i html-loader -D
        添加能使浏览器自动更新(刷新)的插件: npm i webpack-dev-server -D
*/
/*
    loader 的使用: 1)下载  2)使用 (配置loader)
    plugins 的使用: 1)下载 2)引用 3)使用

    wbepack.config.js  webpack的配置文件
        作用:  指示 webpack 干那些活(当你运行 webpack 指令时, 会加载里面的配置)

        所有构建工具都是基于node.js平台运行的~模块化默认采用commonjs, 
        概念:我们创建的src文件是我们写项目的源代码,用的是ES6模块化
             而wbepack.config.js文件是我们写配置的源代码,默认用的是commonjs
*/

所以,我在这里运行的命令是:

npm run build

 

loader的使用

在原来的基础上在src文件夹中创建一个css文件,然后在index.js中引入

在这里插入图片描述

为什么要用loader,因为webpack中默认是不支持js中引入css的,所以要用到 loader

然后就可以在webpack.config.js文件中写配置代码, 代码内容如下:

const path = require('path') // 引用path模块

module.exports = {  // 这里是commrnt.js语法
    // 入口文件
    entry:"./src/index.js",
    // 打包后的出口文件
    output:{
        // 输出的路径  是绝对路径(导入path模块) 这里是用node来做的
        path:path.resolve(__dirname,'build'),
        // 输出的文件名称
        filename:'build.js',
    },
    // loader的配置
    module:{
        rules:[
            // 详细loader配置

            // 打包css的配置
            {
                // 使用正则表达式,匹配那些文件
                test: /\.css$/,
                use:[
                    // use数组中loader执行顺序, 从右到左, 从下到上, 依次执行
                    // 创建style标签, 将js中的样式资源插入进行, 添加到head中生效
                    'style-loader',
                    // 将css文件变成commitjs模块加载js中, 里面的内容是样式字符串
                    'css-loader'
                ]
            }
        ]
    },
    // 使用开发模式打包
    mode:"development"
}
添加能使css一起打包的插件,运行命令为: npm i css-loader style-loader -D
执行打包命令: npm run build   查看结果

 

loader的使用之打包scss

在原来的基础上在src文件夹中创建一个scss文件,然后在index.js中引入

在这里插入图片描述

然后就可以在webpack.config.js文件中写配置代码, 代码内容如下:

const path = require('path') // 引用path模块

module.exports = {  // 这里是commrnt.js语法
    // 入口文件
    entry:"./src/index.js",
    // 打包后的出口文件
    output:{
        // 输出的路径  是绝对路径(导入path模块) 这里是用node来做的
        path:path.resolve(__dirname,'build'),
        // 输出的文件名称
        filename:'build.js',
    },
    // loader的配置
    module:{
        rules:[
            // 详细loader配置

            // 打包css的配置
            {
                // 使用正则表达式,匹配那些文件
                test: /\.css$/,
                use:[
                    // use数组中loader执行顺序, 从右到左, 从下到上, 依次执行
                    // 创建style标签, 将js中的样式资源插入进行, 添加到head中生效
                    'style-loader',
                    // 将css文件变成commitjs模块加载js中, 里面的内容是样式字符串
                    'css-loader'
                ]
            },
            // 打包scss的配置
            {
                test: /\.scss$/,
                // 注意 是sass-loader ,不是 scss-loader
                // 是数组,代表的是要使用多个loader处理,用use
                use: [ 
                    'style-loader', 
                    'css-loader', 
                    // 将scss文件编译成css文件
                    'sass-loader' 
                ]
            }
        ]
    },
    // 使用开发模式打包
    mode:"development"
}
添加能使scss一起打包的插件,运行命令为: npm install sass-loader node-sass webpack -D  
因为你刚刚下载过 css-loader style-loader所以不用再次下载了
执行打包命令: npm run build   查看结果

 

打包html资源的插件使用

作用: 将src的html文件进行打包, 在打包完成后在build文件夹中生成一个html文件, 并且会对这个html文件做处理,自动帮你把使用的文件引用进去

然后就可以在webpack.config.js文件中写配置代码, 代码内容如下:

const path = require('path') // 引用path模块
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 引入html-webpack-plugin

module.exports = {  // 这里是commrnt.js语法
    // 入口文件
    entry:"./src/index.js",
    // 打包后的出口文件
    output:{
        // 输出的路径  是绝对路径(导入path模块) 这里是用node来做的
        path:path.resolve(__dirname,'build'),
        // 输出的文件名称
        filename:'build.js',
    },
    // loader的配置
    module:{
        rules:[
            // 详细loader配置

            // 打包css的配置
            {
                // 使用正则表达式,匹配那些文件
                test: /\.css$/,
                use:[
                    // use数组中loader执行顺序, 从右到左, 从下到上, 依次执行
                    // 创建style标签, 将js中的样式资源插入进行, 添加到head中生效
                    'style-loader',
                    // 将css文件变成commitjs模块加载js中, 里面的内容是样式字符串
                    'css-loader'
                ]
            },
            // 打包scss的配置
            {
                test: /\.scss$/,
                // 注意 是sass-loader ,不是 scss-loader
                // 是数组,代表的是要使用多个loader处理,用use
                use: [ 
                    'style-loader', 
                    'css-loader', 
                    // 将scss文件编译成css文件
                    'sass-loader' 
                ]
            }
        ]
    },
    // plugins的配置
    plugins:[
        // 详细plugins的配置

        // 因为是直接引的,所以 new 就好了
        // 功能:默认会创建一个空的HTML文件,自动引入打包输出的所有资源(JS/CSS)
        new HtmlWebpackPlugin({
			// 复制 './src/index.html'文件,并自动引入打包输出的所有资源(JS/CSS)
			template:'./src/index.html'
		})
    ],  
    // 使用开发模式打包
    mode:"development"
}
添加能使html一起打包的插件,运行命令为: npm i html-webpack-plugin -D
执行打包命令: npm run build   查看结果

打包图片资源文件

首先在src文件夹中复制三张图片, 之后在sass中引入, 最后在html文件中展示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

然后就可以在webpack.config.js文件中写配置代码, 代码内容如下:

const path = require('path') // 引用path模块
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 引入html-webpack-plugin

module.exports = {  // 这里是commrnt.js语法
    // 入口文件
    entry:"./src/index.js",
    // 打包后的出口文件
    output:{
        // 输出的路径  是绝对路径(导入path模块) 这里是用node来做的
        path:path.resolve(__dirname,'build'),
        // 输出的文件名称
        filename:'build.js',
    },
    // loader的配置
    module:{
        rules:[
            // 详细loader配置

            // 打包css的配置
            {
                // 使用正则表达式,匹配那些文件
                test: /\.css$/,
                use:[
                    // use数组中loader执行顺序, 从右到左, 从下到上, 依次执行
                    // 创建style标签, 将js中的样式资源插入进行, 添加到head中生效
                    'style-loader',
                    // 将css文件变成commitjs模块加载js中, 里面的内容是样式字符串
                    'css-loader'
                ]
            },
            // 打包scss的配置
            {
                test: /\.scss$/,
                // 注意 是sass-loader ,不是 scss-loader
                // 是数组,代表的是要使用多个loader处理,用use
                use: [ 
                    'style-loader', 
                    'css-loader', 
                    // 将scss文件编译成css文件
                    'sass-loader' 
                ]
            },
            {
                // 问题:默认处理不了html中img图片
                // 处理图片资源
                test: /\.(jpg|png|gif)/,
                // 使用一个loader时,直接写就行了
                loader:'url-loader',
                options:{
                    // 图片大小小于8KB,就会被base64处理
                    // 优点:减少请求数量(减轻服务器压力)
                    // 缺点:图片体积会增大, 就会导致文件请求速度更慢
                    limit: 8 * 1024,
                    // 问题: 因为url-loader默认使用es6模块化解析, 
                    // 而html-loader引入图片commonjs
                    // 解析时会出问题: [object Module]
                    // 解决: 关闭url-loader的es6模块化, 使用commonjs解析
                    esModule: false,
                    // 给图片进行重命名
                    // [hash:10]取图片的hash的前10位
                    // [ext]去文件原来扩展名
                    name: '[hash:10].[ext]'
                }
            },
            {
                test:/\.html$/,
                // 处理html文件的img图片 (负责引入img, 从而能被url-loader进行处理)
                loader:'html-loader'
            }
        ]
    },
    // plugins的配置
    plugins:[
        // 详细plugins的配置

        // 因为是直接引的,所以 new 就好了
        // 功能:默认会创建一个空的HTML文件,自动引入打包输出的所有资源(JS/CSS)
        new HtmlWebpackPlugin({
			// 复制 './src/index.html'文件,并自动引入打包输出的所有资源(JS/CSS)
			template:'./src/index.html'
		})
    ],  
    // 使用开发模式打包
    mode:"development"
}
添加能使图片打包的插件,运行命令为: npm i url-loader file-loader -D
添加能使html中图片打包的插件,运行命令为: npm i html-loader -D
执行打包命令: npm run build   查看结果

 

热更新 devServer

通过devServer进行热更新, 代码内容如下:

const path = require('path') // 引用path模块
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 引入html-webpack-plugin

module.exports = {  // 这里是commrnt.js语法
    // 入口文件
    entry:"./src/index.js",
    // 打包后的出口文件
    output:{
        // 输出的路径  是绝对路径(导入path模块) 这里是用node来做的
        path:path.resolve(__dirname,'build'),
        // 输出的文件名称
        filename:'build.js',
    },
    // loader的配置
    module:{
        rules:[
            // 详细loader配置

            // 打包css的配置
            {
                // 使用正则表达式,匹配那些文件
                test: /\.css$/,
                use:[
                    // use数组中loader执行顺序, 从右到左, 从下到上, 依次执行
                    // 创建style标签, 将js中的样式资源插入进行, 添加到head中生效
                    'style-loader',
                    // 将css文件变成commitjs模块加载js中, 里面的内容是样式字符串
                    'css-loader'
                ]
            },
            // 打包scss的配置
            {
                test: /\.scss$/,
                // 注意 是sass-loader ,不是 scss-loader
                // 是数组,代表的是要使用多个loader处理,用use
                use: [ 
                    'style-loader', 
                    'css-loader', 
                    // 将scss文件编译成css文件
                    'sass-loader' 
                ]
            },
            {
                // 问题:默认处理不了html中img图片
                // 处理图片资源
                test: /\.(jpg|png|gif)/,
                // 使用一个loader时,直接写就行了
                loader:'url-loader',
                options:{
                    // 图片大小小于8KB,就会被base64处理
                    // 优点:减少请求数量(减轻服务器压力)
                    // 缺点:图片体积会增大, 就会导致文件请求速度更慢
                    limit: 8 * 1024,
                    // 问题: 因为url-loader默认使用es6模块化解析, 
                    // 而html-loader引入图片是commonjs
                    // 解析时会出问题: [object Module]
                    // 解决: 关闭url-loader的es6模块化, 使用commonjs解析
                    esModule: false,
                    // 给图片进行重命名
                    // [hash:10]取图片的hash的前10位
                    // [ext]去文件原来扩展名
                    name: '[hash:10].[ext]'
                }
            },
            {
                test:/\.html$/,
                // 处理html文件的img图片 (负责引入img, 从而能被url-loader进行处理)
                loader:'html-loader'
            }
        ]
    },
    // plugins的配置
    plugins:[
        // 详细plugins的配置

        // 因为是直接引的,所以 new 就好了
        // 功能:默认会创建一个空的HTML文件,自动引入打包输出的所有资源(JS/CSS)
        new HtmlWebpackPlugin({
			// 复制 './src/index.html'文件,并自动引入打包输出的所有资源(JS/CSS)
			template:'./src/index.html'
		})
    ],  
    // 使用开发模式打包
    mode:"development",

    // 开发服务器 devServer:用来自动化(自动编译,自动打开浏览器,自动刷新浏览器)
    // 用简单概括就是: 热更新
    // 特点:只会在内存中编译打包,不会有任何输出
    // 启动指令: webpack-dev-server 你也可以在package.json文件中重新修改指令
	devServer:{
        contentBase:path.resolve(__dirname,'build'),
        // 启动gzip压缩
        compress:true,
        // 修改端口号
        port:8080,
        //自动打开浏览器
		open:true
    }
}
添加能使浏览器自动更新(刷新)的插件,运行命令为: npm i webpack-dev-server -D
执行命令: webpack-dev-server 启动服务器,修改代码查看结果

 

注意

1.各种命令不要写错
2.有报错学会翻译看报错, 多去百度

 

总结

以上就是作者自己整理的关于webpack的功能和插件的简单使用,希望广大读者喜欢, 感谢大家