目录
开发devServer 在module中增加 devServer配置项
创建相关文件夹与文件(build与src文件加与index.js)
运行指令
a)开发环境指令:
webpack ./src/index.js -o ./build/built.js --mode=development
webpack就会以./src/index.js为入口文件开始打包,打包后输出到./build/built.js整体打包环境,是开发环境
b)生产环境指令:
webpack ./src/index.js -o ./build/built.js --mode=production
做的都是一样的,环境是生产环境
c)当配置文件写好后,可以直接使用webpack指令进行打包
index.js: webpack入口起点文件
2. 结论:
1. webpack能处理js/json资源,不能处理css/img等其他资源
2. 生产环境和开发环境将ES6模块化编译成浏览器能识别的模块化~
3. 生产环境比开发环境多一个压缩js代码。
- /*
- webpack.config.js webpack的配置文件
- 作用: 指示 webpack 干哪些活(当你运行 webpack 指令时,会加载里面的配置)
- 所有构建工具都是基于nodejs平台运行的~模块化默认采用commonjs。
- */
-
- // resolve用来拼接绝对路径的方法
- const { resolve } = require('path');
-
- module.exports = {
- // webpack配置
- // 入口起点
- entry: './src/index.js',
- // 输出
- output: {
- // 输出文件名
- filename: 'built.js',
- // 输出路径
- // __dirname nodejs的变量,代表当前文件的目录绝对路径
- path: resolve(__dirname, 'build')
- },
- // loader的配置
- module: {
- rules: [
- // 详细loader配置
- // 不同文件必须配置不同loader处理
- {
- // 匹配哪些文件
- test: /\.css$/,
- // 使用哪些loader进行处理
- use: [
- // use数组中loader执行顺序:从右到左,从下到上 依次执行
- // 创建style标签,将js中的样式资源插入进行,添加到head中生效
- 'style-loader',
- // 将css文件变成commonjs模块加载js中,里面内容是样式字符串
- 'css-loader'
- ]
- },
- {
- test: /\.less$/,
- use: [
- 'style-loader',
- 'css-loader',
- // 将less文件编译成css文件
- // 需要下载 less-loader和less
- 'less-loader'
- ]
- }
- ]
- },
- // plugins的配置
- plugins: [
- // 详细plugins的配置
- ],
- // 模式
- mode: 'development', // 开发模式
- // mode: 'production'
- }
- /*
- loader: 1. 下载 2. 使用(配置loader)
- plugins: 1. 下载 2. 引入 3. 使用
- */
- const { resolve } = require('path');
- const HtmlWebpackPlugin = require('html-webpack-plugin');
-
- module.exports = {
- entry: './src/index.js',
- output: {
- filename: 'built.js',
- path: resolve(__dirname, 'build')
- },
- module: {
- rules: [
- // loader的配置
- ]
- },
- plugins: [
- // plugins的配置
- // html-webpack-plugin
- // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
- // 需求:需要有结构的HTML文件
- new HtmlWebpackPlugin({
- // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
- template: './src/index.html'
- })
- ],
- mode: 'development'
- };
- const { resolve } = require('path');
- const HtmlWebpackPlugin = require('html-webpack-plugin');
-
- module.exports = {
- entry: './src/index.js',
- output: {
- filename: 'built.js',
- path: resolve(__dirname, 'build')
- },
- module: {
- rules: [
- {
- test: /\.less$/,
- // 要使用多个loader处理用use
- use: ['style-loader', 'css-loader', 'less-loader']
- },
- {
- // 问题:默认处理不了html中img图片
- // 处理图片资源
- test: /\.(jpg|png|gif)$/,
- // 使用一个loader
- // 下载 url-loader file-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: [
- new HtmlWebpackPlugin({
- template: './src/index.html'
- })
- ],
- mode: 'development'
- };
- const { resolve } = require('path');
- const HtmlWebpackPlugin = require('html-webpack-plugin');
-
- module.exports = {
- entry: './src/index.js',
- output: {
- filename: 'built.js',
- path: resolve(__dirname, 'build')
- },
- module: {
- rules: [
- {
- test: /\.css$/,
- use: ['style-loader', 'css-loader']
- },
- // 打包其他资源(除了html/js/css资源以外的资源)
- {
- // 排除css/js/html资源
- exclude: /\.(css|js|html|less)$/,
- loader: 'file-loader',
- options: {
- name: '[hash:10].[ext]'
- }
- }
- ]
- },
- plugins: [
- new HtmlWebpackPlugin({
- template: './src/index.html'
- })
- ],
- mode: 'development'
- };
- // 开发服务器 devServer:用来自动化(自动编译,自动打开浏览器,自动刷新浏览器~~)
- // 特点:只会在内存中编译打包,不会有任何输出
- // 启动devServer指令为:npx webpack-dev-server
- devServer: {
- // 项目构建后路径
- contentBase: resolve(__dirname, 'build'),
- // 启动gzip压缩
- compress: true,
- // 端口号
- port: 3000,
- // 自动打开浏览器
- open: true
- }
- const { resolve } = require('path');
- const HtmlWebpackPlugin = require('html-webpack-plugin');
-
- module.exports = {
- entry: './src/js/index.js',
- output: {
- filename: 'js/built.js',
- path: resolve(__dirname, 'build')
- },
- module: {
- rules: [
- // loader的配置
- {
- // 处理less资源
- test: /\.less$/,
- use: ['style-loader', 'css-loader', 'less-loader']
- },
- {
- // 处理css资源
- test: /\.css$/,
- use: ['style-loader', 'css-loader']
- },
- {
- // 处理图片资源
- test: /\.(jpg|png|gif)$/,
- loader: 'url-loader',
- options: {
- limit: 8 * 1024,
- name: '[hash:10].[ext]',
- // 关闭es6模块化
- esModule: false,
- outputPath: 'imgs'
- }
- },
- {
- // 处理html中img资源
- test: /\.html$/,
- loader: 'html-loader'
- },
- {
- // 处理其他资源
- exclude: /\.(html|js|css|less|jpg|png|gif)/,
- loader: 'file-loader',
- options: {
- name: '[hash:10].[ext]',
- outputPath: 'media'
- }
- }
- ]
- },
- plugins: [
- // plugins的配置
- new HtmlWebpackPlugin({
- template: './src/index.html'
- })
- ],
- mode: 'development',
- devServer: {
- contentBase: resolve(__dirname, 'build'),
- compress: true,
- port: 3000,
- open: true
- }
- };