@nice-blue: #5b83ad; body { background: @nice-blue; }
let path = require(‘path‘); module.exports = { mode: ‘development‘, entry: ‘./src/index.js‘, output: { path: path.resolve(__dirname, ‘dist‘), filename: ‘bundle.js‘ }, module: { rules: [ { test: /\.less$/, use: [ path.resolve(__dirname, ‘loader‘, ‘style-loader‘), path.resolve(__dirname, ‘loader‘, ‘less-loader‘) ] } ] } }
let less = require(‘less‘) function loader(source) { let css = ‘‘; less.render(source, function (err, c) { css = c.css }) css = css.replace(/\n/g, ‘\\n‘) return css; } module.exports = loader;
less-loader.js
style-loader.js function loader(source) { let style = ` let style = document.createElement(‘style‘); style.innerHTML = ${JSON.stringify(source)} document.head.appendChild(style) ` return style } module.exports = loader
getSource(modulePath) { let rules = this.config.module.rules; let content = fs.readFileSync(modulePath, ‘utf8‘); // 拿到每个规则来处理 for (let i = 0; i < rules.length; i++) { let rule = rules[i]; let { test, use } = rule; let len = use.length - 1; if (test.test(modulePath)) { // 这个模块需要通过loader来转化 // loader获取对应的loader函数 function normalLoader() { let loader = require(use[len--]); // 递归调用loader 实现转化功能 content = loader(content); if (len >= 0) { normalLoader(); } } normalLoader(); } } return content }
原文:https://www.cnblogs.com/guangzhou11/p/12543252.html