Skip to content

练习--写一个loader,处理css文件,让webpack解析css语句。

浏览器本身是不能将css导入的(不论是es6/common.js模块化规范),但是webpack是可以将所有的资源都及逆行打包的。

webpack支持在js文件中将css当作模块导入的处理是有loader的支持。

css-loader可以将css代码转换为js代码,webpack打包完成之后,就会让浏览器执行,实际上浏览器执行的是js代码。

入口文件

js
/*在这里引入css的话,ES6和common.js都不支持的。
但是在webpack中,我们就不需要管那么多,webpack可以将所有的资源都进行打包。
但是我们需要一个转化css的loader来辅助我们。*/
import styleCode from "./assets/index.css";
console.log(styleCode);

style-loader.js

js
//将css语句转换为js,然后插入到页面中
module.exports = function (sourceCode) {
  return ` const style = document.createElement("style");
  style.innerHTML = \`${sourceCode}\`;
  document.head.appendChild(style);
  export default \`${sourceCode}\``;
};
//这里return出去之后相当于在index.css中把css代码都变成了js代码。这里使用export default sourceCode就相当于把这个模块的代码导出了。所以在index.js中可以输出。

src/assets/index.css

css
body{
    background-color: #ccc;
}

webpack.config.js

js
module.exports = {
  mode: "development",
  devtool: "source-map",
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ["./loaders/style-loader"],
      },
    ],
  },
};

MIT License