大纲
模块化css文件
文件目录
安装如下包
css-loader
style-loader
编写配置文件
// webpack.config.js
module:{ // 模块配置
rules:[ //规则
/* css-loader 解析 @import这种语法
style-loader 它是将css插入到head的标签中
loader的执行顺序是从右向左执行
*/
{
test:/\.css$/,
use:[
{
loader:'style-loader',
options:{
insert:"top" // 将style文件插入到最顶部,解决在index.html写<style>body{...}</style>被后面的覆盖
}
},
'css-loader'
]
}
]
}
index.html
<!doctype html>
<html>
<head>
<title>起步</title>
</head>
<body>
</body>
</html>
编写index.css
// index.css
body{
background-color: aquamarine;
}
在index.js文件引入
// index.js
const yang = require('./nodetest');
++++++++++++++++ require('./css/index.css');
function component() {
var element = document.createElement('div');
console.log(yang.log('引入模块文件测试'))
element.innerHTML = '第一个webpackdemo'
return element;
}
document.body.appendChild(component());
保存完,在webpack配置好server自动热更新就可以用了
效果
总的配置文件
// webpack.config.js
const path = require('path');
console.log(path.resolve(__dirname, 'dist')) // e:\big ---project\Webpack project\test01\dist
const HTMLPlugin = require('html-webpack-plugin');
module.exports = {
mode: "development", //模式: "production" | "development" | "none"
entry: './src/index.js', //入口
output: { // 输出
filename: 'main.js', // 打包后的文件名字
//filename: 'main.[hash].js', // 打包后的文件名字变成带有哈希值
//filename: 'main.[hash:8].js', // 文件的哈希值只显示8位
path: path.resolve(__dirname, 'dist') // 路径必须是一个绝对路径, --dirname:是使用当前目录出生成一个dist文件夹
},
devServer: { // 开发服务配置
port: 3000,
progress: true, // 是否显示加载进度条
contentBase: './dist', // 映射地址
compress:true // 是否压缩
},
plugins: [ // 附加插件
new HTMLPlugin({
template:'./src/index.html', // 模板文件
filename:'index.html', // 打包出来的文件名
minify:{
removeAttributeQuotes:true, // 删除html页面的双引号
collapseWhitespace:true, // 将html页面压缩成一行
},
hash:true // 将文件打包成哈希包
})
],
module:{ // 模块配置
rules:[ //规则
/* css-loader 解析 @import这种语法
style-loader 它是将css插入到head的标签中
loader的执行顺序是从右向左执行
*/
{
test:/\.css$/,
use:[
{
loader:'style-loader',
options:{
insert:"top" // 将style文件插入到最顶部,解决在index.html写<style>body{...}</style>被后面的覆盖
}
},
'css-loader'
]
}
]
}
};
能继续处理css预编译文件
这边举less为例,配置文件再加上个规则就OK了
// webpack.config.js
module: {
rules: [
{
test: /\.css$/,
use: [{
loader: 'style-loader',
options: {
insert: "top"
}
},
'css-loader'
]
},
{ // 解析 less文件
test: /\.less$/,
use: [{
loader: 'style-loader',
options: {
insert: "top"
}
},
'css-loader',
'less-loader'
]
}
]
}
};
将css编译后变成单个css文件
上述都是编译后直接写在html页面中的
因为我们使用了style-loader插件
安装如下包
mini-css-extract-plugin
然后修改配置文件
总的的配置文件
const path = require('path');
console.log(path.resolve(__dirname, 'dist')) // e:\big ---project\Webpack project\test01\dist
const HTMLPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
mode: "development", //模式: "production" | "development" | "none"
entry: './src/index.js', //入口
output: { // 输出
filename: 'main.js', // 打包后的文件名字
//filename: 'main.[hash].js', // 打包后的文件名字变成带有哈希值
//filename: 'main.[hash:8].js', // 文件的哈希值只显示8位
path: path.resolve(__dirname, 'dist') // 路径必须是一个绝对路径, --dirname:是使用当前目录出生成一个dist文件夹
},
devServer: { // 开发服务配置
port: 3000,
progress: true, // 是否显示加载进度条
contentBase: './dist', // 映射地址
compress: true // 是否压缩
},
plugins: [ // 附加插件
new HTMLPlugin({ // 打包html文件
template: './src/index.html', // 模板文件
filename: 'index.html', // 打包出来的文件名
minify: {
removeAttributeQuotes: true, // 删除html页面的双引号
collapseWhitespace: true, // 将html页面压缩成一行
},
hash: true // 将文件打包成哈希包
}),
new MiniCssExtractPlugin({ // 打包css文件
filename:"index.css" // 抽离出来的文件名字
})
],
module: { // 模块配置
rules: [ //规则
/* css-loader 解析 @import这种语法
style-loader 它是将css插入到head的标签中
loader的执行顺序是从右向左执行
*/
{ // 解析 css文件
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader'
]
},
{ // 解析 less文件
test: /\.less$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'less-loader'
]
}
]
}
};
css自动添加前缀
将css内的属性自动添加前缀
安装如下包
npm install postcss-loader autoprefixer
然后修改配置文件
编写postcss.config.js文件
总的配置文件
const path = require('path');
console.log(path.resolve(__dirname, 'dist')) // e:\big ---project\Webpack project\test01\dist
const HTMLPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
mode: "development", //模式: "production" | "development" | "none"
entry: './src/index.js', //入口
output: { // 输出
filename: 'main.js', // 打包后的文件名字
//filename: 'main.[hash].js', // 打包后的文件名字变成带有哈希值
//filename: 'main.[hash:8].js', // 文件的哈希值只显示8位
path: path.resolve(__dirname, 'dist') // 路径必须是一个绝对路径, --dirname:是使用当前目录出生成一个dist文件夹
},
devServer: { // 开发服务配置
port: 3000,
progress: true, // 是否显示加载进度条
contentBase: './dist', // 映射地址
compress: true // 是否压缩
},
plugins: [ // 附加插件
new HTMLPlugin({ // 打包html文件
template: './src/index.html', // 模板文件
filename: 'index.html', // 打包出来的文件名
minify: {
removeAttributeQuotes: true, // 删除html页面的双引号
collapseWhitespace: true, // 将html页面压缩成一行
},
hash: true // 将文件打包成哈希包
}),
new MiniCssExtractPlugin({ // 打包css文件
filename:"index.css" // 抽离出来的文件名字
})
],
module: { // 模块配置
rules: [ //规则
/* css-loader 解析 @import这种语法
style-loader 它是将css插入到head的标签中
loader的执行顺序是从右向左执行
*/
{ // 解析 css文件
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'postcss-loader'
]
},
{ // 解析 less文件
test: /\.less$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'less-loader',
'postcss-loader'
]
}
]
}
};