1、安装webpack4

npm i webpack@4.44.2 webpack-cli@4.0.0 -D

默认安装完成后只有一个node_modules目录和package.json文件。

-S和-D参数的区别:

npm i xxx -S 等同于:

npm install xxx --save //写入package.json的dependencies对象

npm i xxx -D 等同于:

npm install module_name --save-dev //写入package.json的devDependencies对象

2、运行

npx webpack

运行webpack会寻找配置文件webpack.config.js,如果没有,就用默认配置,默认输出文件夹是dist,文件名是main.js,这些信息都是在内存中托管的。

npx可以寻找node_modules里面的webpack命令,我们也可以在package.json自定义命令:

{

"scripts":{

"build":"webpack --config webpack.config.js"

},

"devDependencies": {

"webpack": "^4.44.2",

"webpack-cli": "^4.0.0"

},

"dependencies": {

"jquery": "^3.5.1"

}

}

运行npm run build命令即可。

3、基础配置

let path = require('path'); //node的path模块

module.exports = {

mode:'development',//模式,默认两种 production和development

entry:'./src/index.js', //入口

output:{

filename:'bundle.js', //打包后的文件名,名字随便起

path: path.resolve(__dirname,'build') // 必须是绝对路径

}

}

我们在src目录下创建index.js文件:

let a= require('./a.js');

console.log(a);

//a.js:

export var str = 'test'

4、处理html文件(html-webpack-plugin)

webpack的基本配置可以满足js文件的打包输出,但这还远远不够,比如——html文件该如何处理呢?

打包后的html文件,我们希望可以去掉换行和空格等来减少体积,然后还需要在引入的js文件上加入hash防止文件缓存,而且每次打包后的js文件尽量也要加上hash防止nginx层面的文件缓存等等,这时我们需要安装另外的plugin插件来扩展webpack的功能。

处理html的插件叫html-webpack-plugin,我们先来安装一下它。

npm i html-webpack-plugin -D

然后在webpack配置文件使用它:

let path = require('path');

let HtmlWebpackPlugin = require('html-webpack-plugin'); //处理html文件

module.exports = {

mode:'production',//模式,默认两种 production和development

entry:'./src/index.js', //入口

output:{

filename:'bundle.js', //打包后的文件名

path: path.resolve(__dirname,'build') // 必须是绝对路径

},

plugins:[

new HtmlWebpackPlugin({

template:'./src/index.html',

filename:'index.html',

minify:{

removeAttributeQuotes:true, // 去掉引号

collapseWhitespace:true, // 去掉空格

},

hash:true //加hash防止缓存

})

]

}

在运行前打包前我们需要在src目录下新建一个index.html,这个文件不需引入index.js,因为我们在webpack里面已经配置了entry入口信息,系统会自动帮我们把打包后的入口js文件在html中引入。

5、处理css文件(css-loader、style-loader)

一般css文件,我们都是在html中直接引入使用的。但目前我们已经有了统一的index.js入口,如果能将css也作为模块在js中引用和打包输出该多好!

先在src目录下建一个style.css文件做测试:

body{

background:green;

}

然后在index.js引入:

let str = require('./a.js')

console.log(str)

require('./style.css')

如果直接运行webpack打包命令,会输出如下错误信息:

You may need an appropriate loader to handle this file type,

currently no loaders are configured to process this file.

See https://webpack.js.org/concepts#loaders

提示说没用合适的loader处理这种file(css文件),下面我们就要引入专门的loader来处理它。

安装css-loader和style-loader

cnpm i css-loader style-loader -D

这两个loader是分工明确的,css-loader负责css语法解析(比如@import);style-loader负责将css插入到html的head标签里面。

let path = require('path');

let HtmlWebpackPlugin = require('html-webpack-plugin'); //处理html文件

module.exports = {

mode:'production',//模式,默认两种 production和development

entry:'./src/index.js', //入口

output:{

filename:'bundle.[hash:8].js', //打包后的文件名加入哈希(:8表示哈希值的位数),可以防止nginx缓存

path: path.resolve(__dirname,'build') // 必须是绝对路径

},

plugins:[ //配置插件

new HtmlWebpackPlugin({

template:'./src/index.html',

filename:'index.html',

minify:{

removeAttributeQuotes:true, // 去掉引号

collapseWhitespace:true, // 去掉空格

},

hash:true //加hash防止引用文件缓存

})

],

module: {

//配置loader

// css-loader处理@import语法的;

// 而style-loader负责将css插入html的head标签里面的

// 多个loader需要使用数组[]

// loader的顺序默认是从右向左执行

rules: [

{test:/\.css$/,use:['style-loader','css-loader']} //test就是正则匹配,匹配到.css文件后,use就是用什么模块来处理它。

]

}

}

如果我们在index.html里面也定义了一些样式:

Title

body{

background:pink;

}

如果我们希望这个背景色的优先级更高的话:

let path = require('path');

let HtmlWebpackPlugin = require('html-webpack-plugin'); //处理html文件

module.exports = {

mode: 'production',//模式,默认两种 production和development

entry: './src/index.js', //入口

output: {

filename: 'bundle.[hash:8].js', //打包后的文件名加入哈希(:8表示哈希值的位数),可以防止nginx缓存

path: path.resolve(__dirname, 'build') // 必须是绝对路径

},

plugins: [ //配置插件

new HtmlWebpackPlugin({

template: './src/index.html',

filename: 'index.html',

minify: {

removeAttributeQuotes: true, // 去掉引号

collapseWhitespace: true, // 去掉空格

},

hash: true //加hash防止引用文件缓存

})

],

module: { //配置loader

// css-loader处理@import语法的;

// 而style-loader负责将css插入html的head标签里面的

// 多个loader需要使用数组[]

// loader的顺序默认是从右向左执行

rules: [

{

test: /\.css$/,

use: [{

loader: 'style-loader', //loader可以传对象

options: {

insert: 'top' //将插入点调到最上面

}

},

'css-loader'

]

}

]

}

}

6、抽离css(mini-css-extract-plugin)

按以上方式打包出来的index.html是这样的:

Title

这种方式是直接将css写入了html里面,如果太多css样式的话会很不方便,我们还是喜欢用link引入的方式,这样就需借助另外的插件来处理了。

安装mini-css-extract-plugin插件:

cnpm i mini-css-extract-plugin -D

修改一下webpack的配置文件:

let path = require('path');

let HtmlWebpackPlugin = require('html-webpack-plugin'); //处理html文件

let MiniCssExtractPlugin = require('mini-css-extract-plugin');//抽离css

module.exports = {

mode: 'production',//模式,默认两种 production和development

entry: './src/index.js', //入口

output: {

filename: 'bundle.[hash:8].js', //打包后的文件名加入哈希(:8表示哈希值的位数),可以防止nginx缓存

path: path.resolve(__dirname, 'build') // 必须是绝对路径

},

plugins: [ //配置插件

new HtmlWebpackPlugin({ // 处理html插件

template: './src/index.html',

filename: 'index.html',

minify: {

removeAttributeQuotes: true, // 去掉引号

collapseWhitespace: true, // 去掉空格

},

hash: true //加hash防止引用文件缓存

}),

new MiniCssExtractPlugin({ // 抽离css插件

filename: 'main.css',

})

],

module: { //配置loader

// css-loader处理@import语法的;

// 而style-loader负责将css插入html的head标签里面的

// 多个loader需要使用数组[]

// loader的顺序默认是从右向左执行

rules: [

{

test: /\.css$/,

use: [

// {

// loader: 'style-loader', //loader可以传对象

// options: {

// insert: 'top' //将插入点调到最上面

// }

// },

MiniCssExtractPlugin.loader,//去掉style-loader,以这个代替

'css-loader'

]

}

]

}

}

7、css自动加前缀(postcss-loader autoprefixer)

我们在写css3时,经常会遇到不同浏览器的前缀问题,如果一个一个加是非常烦的,如何自动添加呢?

这就需要新增loader来帮我们处理了:

cnpm i postcss-loader autoprefixer -D

这个autoprefixer在使用之前需创建一个配置文件。

postcss.config.css:

module.exports = {

plugins:[

require("autoprefixer")({

overrideBrowserslist:[

"defaults",

"Android 4.1",

"iOS 7.1",

"Chrome>31",

"ff>31",

"ie>=8",

"last 2 versions",

">0%"

]

})

]

}

然后修改一下webpack配置文件:

let path = require('path');

let HtmlWebpackPlugin = require('html-webpack-plugin'); //处理html文件

let MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {

mode: 'production',//模式,默认两种 production和development

entry: './src/index.js', //入口

output: {

filename: 'bundle.[hash:8].js', //打包后的文件名加入哈希(:8表示哈希值的位数),可以防止nginx缓存

path: path.resolve(__dirname, 'build') // 必须是绝对路径

},

plugins: [ //配置插件

new HtmlWebpackPlugin({ // 处理html插件

template: './src/index.html',

filename: 'index.html',

minify: {

removeAttributeQuotes: true, // 去掉引号

collapseWhitespace: true, // 去掉空格

},

hash: true //加hash防止引用文件缓存

}),

new MiniCssExtractPlugin({ // 抽离css插件

filename: 'main.css',

})

],

module: { //配置loader

// css-loader处理@import语法的;

// 而style-loader负责将css插入html的head标签里面的

// 多个loader需要使用数组[]

// loader的顺序默认是从右向左执行

rules: [

{

test: /\.css$/,

use: [

// {

// loader: 'style-loader', //loader可以传对象

// options: {

// insert: 'top' //将插入点调到最上面

// }

// },

MiniCssExtractPlugin.loader,//去掉style-loader,以这个代替

'css-loader',

'postcss-loader' //先处理前缀,然后再交给css-loader解析

]

}

]

}

}

我们修改style.css来做一下测试:

body{

background:green;

transform: rotate(90deg);

}

运行一下打包命令,看看打包出来的main.css是否有前缀:

body{

background:green;

-webkit-transform: rotate(90deg);

-moz-transform: rotate(90deg);

-ms-transform: rotate(90deg);

-o-transform: rotate(90deg);

transform: rotate(90deg);

}

8、抽离的css如何优化?

我们发现,前面的配置打包出来的main.css并没有进行压缩处理,这个如何优化一下呢?

老办法,只能继续安装插件来解决。

cnpm i optimize-css-assets-webpack-plugin -D

然后是webpack配置文件:

let path = require('path');

let HtmlWebpackPlugin = require('html-webpack-plugin'); //处理html文件

let MiniCssExtractPlugin = require('mini-css-extract-plugin');//抽离css

let OptimizeCss = require('optimize-css-assets-webpack-plugin'); // 优化抽离的css

module.exports = {

mode: 'production',//模式,默认两种 production和development

entry: './src/index.js', //入口

output: {

filename: 'bundle.[hash:8].js', //打包后的文件名加入哈希(:8表示哈希值的位数),可以防止nginx缓存

path: path.resolve(__dirname, 'build') // 必须是绝对路径

},

plugins: [ //配置插件

new HtmlWebpackPlugin({ // 处理html插件

template: './src/index.html',

filename: 'index.html',

minify: {

removeAttributeQuotes: true, // 去掉引号

collapseWhitespace: true, // 去掉空格

},

hash: true //加hash防止引用文件缓存

}),

new MiniCssExtractPlugin({ // 抽离css插件

filename: 'main.css',

})

],

module: { //配置loader

// css-loader处理@import语法的;

// 而style-loader负责将css插入html的head标签里面的

// 多个loader需要使用数组[]

// loader的顺序默认是从右向左执行

rules: [

{

test: /\.css$/,

use: [

// {

// loader: 'style-loader', //loader可以传对象

// options: {

// insert: 'top' //将插入点调到最上面

// }

// },

MiniCssExtractPlugin.loader,//去掉style-loader,以这个代替

'css-loader',

'postcss-loader'

]

}

]

},

optimization:{ // 优化项

minimizer:[

new OptimizeCss()

]

}

}

运行webpack命令后,css确实是压缩了,但js却没有压缩了,咋办呢?

没关系,我们可以引入uglifyjs-webpack-plugin插件来解决。

cnpm i uglifyjs-webpack-plugin -D

然后在webpack配置文件使用它:

let path = require('path');

let HtmlWebpackPlugin = require('html-webpack-plugin'); //处理html文件

let MiniCssExtractPlugin = require('mini-css-extract-plugin');//抽离css

let OptimizeCss = require('optimize-css-assets-webpack-plugin'); // 优化抽离的css

let UglifyJS = require('uglifyjs-webpack-plugin');

module.exports = {

mode: 'production',//模式,默认两种 production和development

entry: './src/index.js', //入口

output: {

filename: 'bundle.[hash:8].js', //打包后的文件名加入哈希(:8表示哈希值的位数),可以防止nginx缓存

path: path.resolve(__dirname, 'build') // 必须是绝对路径

},

plugins: [ //配置插件

new HtmlWebpackPlugin({ // 处理html插件

template: './src/index.html',

filename: 'index.html',

minify: {

removeAttributeQuotes: true, // 去掉引号

collapseWhitespace: true, // 去掉空格

},

hash: true //加hash防止引用文件缓存

}),

new MiniCssExtractPlugin({ // 抽离css插件

filename: 'main.css',

})

],

module: { //配置loader

// css-loader处理@import语法的;

// 而style-loader负责将css插入html的head标签里面的

// 多个loader需要使用数组[]

// loader的顺序默认是从右向左执行

rules: [

{

test: /\.css$/,

use: [

// {

// loader: 'style-loader', //loader可以传对象

// options: {

// insert: 'top' //将插入点调到最上面

// }

// },

MiniCssExtractPlugin.loader,//去掉style-loader,以这个代替

'css-loader',

'postcss-loader'

]

}

]

},

optimization:{ // 优化项

minimizer:[

new UglifyJS({ //js压缩

cache:true,

sourceMap:true,

parallel:true

}),

new OptimizeCss() // css压缩

]

}

}

html引入css webpack_webpack4(一):基本配置、html和css的处理相关推荐

  1. webpack配置:less/sass文件打包和分离、自动处理css前缀、消除未使用的css及完整的webpack.config.js文件...

    一.less文件打包和分离 1.要使用less,首先使用npm安装less服务:还需要安装Less-loader用来打包使用. npm install less --save-dev npm inst ...

  2. CSS 从入门到放弃系列:CSS的引入方式

    css的四种引入方式 内联方式(行间样式) <div style="width:100px;height: 100px; background-color: red"> ...

  3. 从零开始学前端:CSS引入 --- 今天你学习了吗?(CSS:Day07)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(CSS) 复习:从零开始学前端:列表标签 - 今天你学习了吗?(CSS:Day06) 文章目录 从零开始学前端:程序猿小白也可以完全掌握! ...

  4. css层叠样式表基础学习笔记--第一章 css简介及引入

    第一章 css简介及引入 1-01 css简介 1-02 css优缺点 1-03 css书写格式 1-04 css引入格式 行内样式 内部样式 外部样式 导入样式 1-05 css注释 1-01 cs ...

  5. css学习(第一天)(css基础选择器,css字体属性,css文本属性,css引入方式)

    CSS第一天 1.css简介 1.1 html的局限性 1.2 css-网页的美容师 1.3 css语法规范 1.4 css代码风格 1.4.1 样式格式书写 1.4.2 样式大小写风格 1.4.3 ...

  6. css颜色rgba代码对照表_改善 CSS 的 10 个最佳实践

       戳蓝字「前端技术优选」关注我们哦! CSS 看起来是一种非常直接且不易犯错的语言.只需要添加规则以对网站进行样式设置就可以了,对吗?对于只需要几个 CSS 文件的小型站点,可能是这种情况.但是在 ...

  7. css 动态rem_【面试题】CSS知识点整理(附答案)

    目录 伪类和伪元素 实现固定宽高比(width: height = 4: 3)的div,怎么设置 CSS选择器 CSS解析规则 flex: 1 完整写法 display: none和 visibili ...

  8. 翻译 | 关键CSS和Webpack: 减少阻塞渲染的CSS的自动化解决方案

    原文地址: Critical CSS and Webpack: Automatically Minimize Render-Blocking CSS 原文作者: Anthony Gore 译者: 蜗牛 ...

  9. apache伪静态把css 排除掉_一文梳理CSS必会知识点

    本文主要梳理CSS必会知识点,会持续补充更新哦!长文预警!这可能是目前最长的一篇了? ? ? ? CSS引入 有哪些引入方式?通过link和@import引入有什么区别?(* ) CSS引入方式有4种 ...

  10. 在PHP中给表格加上css样式,表格CSS样式设置 给table表格设置CSS样式表

    表格table tr td CSS花色设置 给table表格设置CSS花式表 在一个网页中多处运用了表格table标签,这个时候给指定的表格对象设置装备摆设款式仿照照旧概略经由CSS发展管束配置. 着 ...

最新文章

  1. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个...
  2. 无法创建 set/get 参数(参数 ID)
  3. wincc7的常用c语言,wincc几个常用c语言编程-20210324073153.docx-原创力文档
  4. 4. Browser 对象 - Navigator 对象(2)
  5. 自然辩证法 题目2
  6. 强大的SQL计算利器-SPL
  7. 公司项目JAVA开发规范总结(七)——编程规范
  8. 全市场等权中位数_市场指数估值周报20200406
  9. Mac谷歌浏览器关闭自动更新,下载历史版本方法,解决不自动提示保存密码的问题
  10. 怎么把视频转成mp3音频,下面有四个方法
  11. Uni-app 小程序使用腾讯云IM实时通讯
  12. 关于软件研发生产力的误区与思考
  13. html+css实现三角形的三种方法
  14. 关于海盗分金币问题的讨论(面试题)[]
  15. 时间序列之AR、MA、ARMA、ARIMA模型
  16. CS1061号错误是什么
  17. php保留小数点4位,PHP小数点后保留几位的教程实例
  18. 欧标IEC62056 兰吉尔关口电表无线抄表数据采集方案
  19. 刘备学Android目录
  20. 中国探月工程首席科学家欧阳自远:“嫦娥”月面图千真万确

热门文章

  1. IEEE signal processing letters 投稿经验
  2. Laravel 中简约而不简单的 Macroable 宏指令
  3. Docker系列教程09-使用Docker Hub管理镜像
  4. Laravel之Eloquent ORM访问器调整器及属性转换
  5. 【转】DHCP工作过程详解
  6. SILK 的 Delay Decision 和 Dither
  7. S60 V3版SDK的官方扩展插件
  8. 某游戏在华为鸿蒙,部分安卓游戏在华为鸿蒙 OS 上运行,被识别成使用 PC 端模拟器...
  9. android ndk怎样加载o文件_JNI初探之NDK 开发环境配置
  10. oracle每天一次差异备份,Oracle的差异增量备份和累积增量备份(zt)