html引入css webpack_webpack4(一):基本配置、html和css的处理
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的处理相关推荐
- webpack配置:less/sass文件打包和分离、自动处理css前缀、消除未使用的css及完整的webpack.config.js文件...
一.less文件打包和分离 1.要使用less,首先使用npm安装less服务:还需要安装Less-loader用来打包使用. npm install less --save-dev npm inst ...
- CSS 从入门到放弃系列:CSS的引入方式
css的四种引入方式 内联方式(行间样式) <div style="width:100px;height: 100px; background-color: red"> ...
- 从零开始学前端:CSS引入 --- 今天你学习了吗?(CSS:Day07)
从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(CSS) 复习:从零开始学前端:列表标签 - 今天你学习了吗?(CSS:Day06) 文章目录 从零开始学前端:程序猿小白也可以完全掌握! ...
- css层叠样式表基础学习笔记--第一章 css简介及引入
第一章 css简介及引入 1-01 css简介 1-02 css优缺点 1-03 css书写格式 1-04 css引入格式 行内样式 内部样式 外部样式 导入样式 1-05 css注释 1-01 cs ...
- 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 ...
- css颜色rgba代码对照表_改善 CSS 的 10 个最佳实践
戳蓝字「前端技术优选」关注我们哦! CSS 看起来是一种非常直接且不易犯错的语言.只需要添加规则以对网站进行样式设置就可以了,对吗?对于只需要几个 CSS 文件的小型站点,可能是这种情况.但是在 ...
- css 动态rem_【面试题】CSS知识点整理(附答案)
目录 伪类和伪元素 实现固定宽高比(width: height = 4: 3)的div,怎么设置 CSS选择器 CSS解析规则 flex: 1 完整写法 display: none和 visibili ...
- 翻译 | 关键CSS和Webpack: 减少阻塞渲染的CSS的自动化解决方案
原文地址: Critical CSS and Webpack: Automatically Minimize Render-Blocking CSS 原文作者: Anthony Gore 译者: 蜗牛 ...
- apache伪静态把css 排除掉_一文梳理CSS必会知识点
本文主要梳理CSS必会知识点,会持续补充更新哦!长文预警!这可能是目前最长的一篇了? ? ? ? CSS引入 有哪些引入方式?通过link和@import引入有什么区别?(* ) CSS引入方式有4种 ...
- 在PHP中给表格加上css样式,表格CSS样式设置 给table表格设置CSS样式表
表格table tr td CSS花色设置 给table表格设置CSS花式表 在一个网页中多处运用了表格table标签,这个时候给指定的表格对象设置装备摆设款式仿照照旧概略经由CSS发展管束配置. 着 ...
最新文章
- 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个...
- 无法创建 set/get 参数(参数 ID)
- wincc7的常用c语言,wincc几个常用c语言编程-20210324073153.docx-原创力文档
- 4. Browser 对象 - Navigator 对象(2)
- 自然辩证法 题目2
- 强大的SQL计算利器-SPL
- 公司项目JAVA开发规范总结(七)——编程规范
- 全市场等权中位数_市场指数估值周报20200406
- Mac谷歌浏览器关闭自动更新,下载历史版本方法,解决不自动提示保存密码的问题
- 怎么把视频转成mp3音频,下面有四个方法
- Uni-app 小程序使用腾讯云IM实时通讯
- 关于软件研发生产力的误区与思考
- html+css实现三角形的三种方法
- 关于海盗分金币问题的讨论(面试题)[]
- 时间序列之AR、MA、ARMA、ARIMA模型
- CS1061号错误是什么
- php保留小数点4位,PHP小数点后保留几位的教程实例
- 欧标IEC62056 兰吉尔关口电表无线抄表数据采集方案
- 刘备学Android目录
- 中国探月工程首席科学家欧阳自远:“嫦娥”月面图千真万确
热门文章
- IEEE signal processing letters 投稿经验
- Laravel 中简约而不简单的 Macroable 宏指令
- Docker系列教程09-使用Docker Hub管理镜像
- Laravel之Eloquent ORM访问器调整器及属性转换
- 【转】DHCP工作过程详解
- SILK 的 Delay Decision 和 Dither
- S60 V3版SDK的官方扩展插件
- 某游戏在华为鸿蒙,部分安卓游戏在华为鸿蒙 OS 上运行,被识别成使用 PC 端模拟器...
- android ndk怎样加载o文件_JNI初探之NDK 开发环境配置
- oracle每天一次差异备份,Oracle的差异增量备份和累积增量备份(zt)