现在我在src/css/style.css
文件中,设置全局的图片:
/* 设置一张背景图片 */body {background: url('../img/image.jpg');}
在index.js
文件中引入该css文件:
// 导入 css 文件import './css/style.css'
来看webpack.config.js
的配置:
// 导入 path 的 resolve 模块,进行路径拼接const { resolve } = require('path');// 导出 webpack 的配置对象,注意只能使用 CommonJS 的导出方式module.exports = {// 入口文件entry: './src/index.js',// 出口文件output: {// 打包到的目标地址,注意是绝对路径path: resolve(__dirname, './build'),// 打包出去的文件名filename: 'bundle.js'},// 配置模块module: {// 配置规则rules: [// 配置 css-loader{test: /\.css$/,use: ['style-loader','css-loader']},// 配置 file-loader{test: /\.(jpe?g|png|gif|svg)$/i,use: {loader: 'file-loader'}}]}}
打包后,页面根本不显示图片,这个原因是url-loader、file-loader都是采用es6语法规范的,而不是commonjs规范,由于url-loader、file-loader中可以通过esModule属性来选择是否关闭es6语法规范。其实官网也说了在webpack5中也不再推荐使用file-loader、url-loader,但是任然想使用这两个loader打包css背景图片的话,需要在webpack.config.js
文件中做如下配置:
// 导入 path 的 resolve 模块,进行路径拼接const { resolve } = require('path');// 导出 webpack 的配置对象,注意只能使用 CommonJS 的导出方式module.exports = {// 入口文件entry: './src/index.js',// 出口文件output: {// 打包到的目标地址,注意是绝对路径path: resolve(__dirname, './build'),// 打包出去的文件名filename: 'bundle.js'},// 配置模块module: {// 配置规则rules: [// 配置 css-loader{test: /\.css$/,use: ['style-loader','css-loader']},// 配置 file-loader{test: /\.(jpe?g|png|gif|svg)$/i,use: {loader: 'file-loader',options: {esModule: false}},type: 'javascript/auto'}]}}
最主要的就是两段代码配置:esModule: false
和type: 'javascript/auto'
,这个配置适用于file-loader和url-loader