目录css
上节:使用loader之打包图片html
目录结构以下:webpack
本节使用webpack处理样式,先在src下添加样式文件并引入到index.js中:
新建src/styles/index.css并添加以下内容:web
.pic{ width: 350px; height: 300px; transform: translateX(300px); }
修改src/index.js:npm
import pic from './images/cover.png'; import './styles/index.css'; window.addEventListener('DOMContentLoaded', function() { const root = document.getElementById('root'); const img = new Image(); img.src = pic; img.classList.add('pic'); root.appendChild(img); });
修改webpack.config.js,配置css相关loader
webpack.config.js:segmentfault
// 省略依赖 module.exports = { mode: 'production', entry: './src/index.js', output: { filename: '[name].[contenthash:8].js', path: resolve(__dirname, 'bundles') }, module: { rules: [{ test: /\.(gif|jpg|jpeg|png|svg)$/, use: [{ loader: 'url-loader', options: { // 当图片大于801k时,交给file-loader处理 limit: 801920, // 打包后的文件名 name: '[name].[hash:8].[ext]', // 打包路径 outputPath: 'images/' } }] }, { test: /\.css$/, use: ['style-loader', 'css-loader'] }] }, plugins: [ new HtmlWebpackPlugin({ template: './index.html' }), new CleanWebpackPlugin() ] };
修改完后目录以下:app
而后安装相关loader:
npm i style-loader css-loader -D
而后 npm run buildsvg
此时css就会通过依次通过css-loader > style-loader处理,loader的处理顺序都是从后向前模块化
打包成功后运行 bundles/index.html,能够看到样式生效:ui
刚才在index.js中引入css的方式是:
import './styles/index.css';
这种写法实际上是全局生效的,也就是说index.js中若是依赖了其它js,那这些js均可以直接使用index.css中的样式。
下面改为模块化的引入方式:
src/index.js:
import pic from './images/cover.png'; // import './styles/index.css'; 全局生效 // 改成模块化引入 import indexStyle from './styles/index.css'; window.addEventListener('DOMContentLoaded', function() { const root = document.getElementById('root'); const img = new Image(); img.src = pic; // img.classList.add('pic'); img.classList.add(indexStyle.pic); root.appendChild(img); });
而后还要再css-loader的选项中开启模块化:
webpack.config.js:
module: { rules: [{ test: /\.(gif|jpg|jpeg|png|svg)$/, use: [{ loader: 'url-loader', options: { // 当图片大于801k时,交给file-loader处理 limit: 801920, // 打包后的文件名 name: '[name].[hash:8].[ext]', // 打包路径 outputPath: 'images/' } }] }, { test: /\.css$/, use: ['style-loader', { loader: 'css-loader', options: { // 开启模块化 modules: true } }] }] },
而后再次打包:npm run build, 运行bundles/index.html效果应该和以前同样。