【发布时间】:2018-11-27 03:36:32
【问题描述】:
我正在尝试配置sass-loader,因此它会像.scss 一样转换.css 文件。然而,它总是按原样输出 css 文件。
这是最低限度的设置:
package.json:
{
"dependencies": {
"css-loader": "^0.28.11",
"node-sass": "^4.9.0",
"sass-loader": "^7.0.3",
"webpack": "^4.12.0",
"style-loader": "^0.21.0",
"webpack-cli": "^3.0.3",
"mini-css-extract-plugin": "^0.4.0"
}
}
webpack.config.js:
const path = require('path');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
entry: "./main.sass",
resolve: {
extensions: ['.sass', '.css'],
},
plugins: [new MiniCssExtractPlugin()],
module: {
rules: [
{
test: /\.sass$/,
use: [
MiniCssExtractPlugin.loader,
"css-loader",
"sass-loader?indentedSyntax",
]
},
{
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
"css-loader",
"sass-loader",
]
},
],
},
};
a.fff(让我们看看如果 sass-loader 面临未知扩展会发生什么):
.black {
background-color: black
}
b.css:
.red {
background-color: red
}
main.sass:
body
@import "./a.fff"
@import "./b.css"
好的。现在让我们运行它node ./node_modules/webpack/bin/webpack.js,并检查 dist/main.css:
.red {
background-color: red
}
body { }
body .black {
background-color: black; }
如您所见,a.fff 已正确转换,但 css 只是按原样粘贴。我想得到的是:
body { }
body .black {
background-color: black; }
body .red {
background-color: red; }
有什么办法可以强制 sass-loader 以 .scss 的身份威胁 .css 文件?
【问题讨论】:
-
我认为不同的扩展都被硬编码到 sass-loader 中:like here 也许你可以直接在 loader-pipeline 中将 rename them 写入 .scss,然后将它们提供给 sass-loader ?
-
我希望可以,所以我不会浪费太多时间,问题是
css文件位于第三方库中,就像这里github.com/isagalaev/highlight.js/tree/master/src/styles -
是的,但是在加载器中执行它可能看起来像
{ test: /\.css$/, use: [ MiniCssExtractPlugin.loader, "css-loader", "sass-loader", {loader: "rename-loader", options{filename:"[name].scss'}} ] },虽然这只是猜测,但它是一个非常小的加载器,所以我想知道定制有多难。github.com/ax-schneider/rename-loader/blob/master/index.js -
我已经尝试过了,并把它放在上面的例子中,它没有用:(关于重命名的想法很棒。我想我可以在代码中像
@import 'runTimefile.scss'一样添加类似@ 987654343@你有草图可以完成吗?
标签: webpack sass css-loader sass-loader