Webpack source-map 不解析 sass 导入
Webpack source-map does not resolve sass imports
我将 webpack 配置为转译 scss -> css,但 webpack 生成的源映射无法解析 scss @import
s.
webpack.config.js:
const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const outputPath = path.join(__dirname, 'dist');
module.exports = {
devtool: 'source-map',
entry: ['./src/main.scss'],
target: 'web',
output: {
filename: 'js/[name].bundle.js',
path: outputPath
},
module: {
rules: [
{ // sass / scss loader for webpack
test: /\.(sass|scss)$/,
loader: ExtractTextPlugin.extract([
{
loader: 'css-loader',
options: {
url: false,
import: true,
minimize: true,
sourceMap: true,
}
},
'sass-loader'
])
},
]
},
plugins: [
new ExtractTextPlugin({ // define where to save the file
filename: 'css/[name].bundle.css',
allChunks: true,
})
]
};
main.scss:
@import 'foo';
_foo.scss:
h1 { color: red; }
但是,在 Chrome 开发工具中,我看到了对 main.scss
的引用,我希望引用 _foo.scss
- 请参见下面的屏幕截图:
那里有 sass-loader
,切换为:
{
loader: 'sass-loader',
options: {
sourceMap: true
}
}
这样就可以了。
当您处于开发模式时,您不应使用 extractTextPlugin。
请为开发和生产模式进行额外配置。在生产中使用 extractTextPlugin 很好,但在开发模式下则没有必要,并且可能导致其他功能无法正常工作。所以改用样式加载器。
此外 - 我不确定这是否能解决您的问题 - 尝试在 css 加载程序上使用 importLoaders 道具。在这里查看更多信息:
https://github.com/webpack-contrib/css-loader#importloaders
const path = require('path');
const outputPath = path.join(__dirname, 'dist');
module.exports = {
devtool: 'source-map',
entry: ['./src/main.scss'],
target: 'web',
output: {
filename: 'js/[name].bundle.js',
path: outputPath
},
module: {
rules: [
{ // sass / scss loader for webpack
test: /\.(sass|scss)$/,
loader: [
{
loader: 'style-loader',
options: {
sourceMap: true
}
},
{
loader: 'css-loader',
options: {
url: false,
import: true,
minimize: true,
sourceMap: true,
importLoaders: 1,
}
},
{
loader: 'sass-loader',
options: {
sourceMap: true
}
}
]
},
]
}
};
ExtractTextPlugin
在开发模式下没有任何问题,@Omri Aharon 发布的内容是正确的。但是,您应该考虑 的是仅在开发模式下启用源映射。
要使用其默认生产设置构建 webpack(在 webpack 2.0+ 中默认使用 OccurrenceOrderPlugin 插件),运行 命令 webpack -p
,然后在您的 webpack.config.js
,您可以通过以下方式确定您是否处于开发模式:
const DEBUG = !process.argv.includes('-p');
添加功能
function cssConfig(modules) {
return {
sourceMap: DEBUG,
modules,
localIdentName: DEBUG ? '[name]_[local]_[hash:base64:3]' : '[hash:base64:4]',
minimize: !DEBUG
};
}
在您的 webpack.config.js
中,使您的 scss 加载程序显示为:
test: /\.(sass|scss)$/,
loader: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: [
{
loader: 'css-loader',
options: cssConfig(true)
},
{
loader: 'sass-loader',
options: { sourceMap: DEBUG }
}
]
})
},
我的插件部分有
new ExtractTextPlugin('[name].css?[contenthash]'),
我将 webpack 配置为转译 scss -> css,但 webpack 生成的源映射无法解析 scss @import
s.
webpack.config.js:
const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const outputPath = path.join(__dirname, 'dist');
module.exports = {
devtool: 'source-map',
entry: ['./src/main.scss'],
target: 'web',
output: {
filename: 'js/[name].bundle.js',
path: outputPath
},
module: {
rules: [
{ // sass / scss loader for webpack
test: /\.(sass|scss)$/,
loader: ExtractTextPlugin.extract([
{
loader: 'css-loader',
options: {
url: false,
import: true,
minimize: true,
sourceMap: true,
}
},
'sass-loader'
])
},
]
},
plugins: [
new ExtractTextPlugin({ // define where to save the file
filename: 'css/[name].bundle.css',
allChunks: true,
})
]
};
main.scss:
@import 'foo';
_foo.scss:
h1 { color: red; }
但是,在 Chrome 开发工具中,我看到了对 main.scss
的引用,我希望引用 _foo.scss
- 请参见下面的屏幕截图:
那里有 sass-loader
,切换为:
{
loader: 'sass-loader',
options: {
sourceMap: true
}
}
这样就可以了。
当您处于开发模式时,您不应使用 extractTextPlugin。 请为开发和生产模式进行额外配置。在生产中使用 extractTextPlugin 很好,但在开发模式下则没有必要,并且可能导致其他功能无法正常工作。所以改用样式加载器。
此外 - 我不确定这是否能解决您的问题 - 尝试在 css 加载程序上使用 importLoaders 道具。在这里查看更多信息:
https://github.com/webpack-contrib/css-loader#importloaders
const path = require('path');
const outputPath = path.join(__dirname, 'dist');
module.exports = {
devtool: 'source-map',
entry: ['./src/main.scss'],
target: 'web',
output: {
filename: 'js/[name].bundle.js',
path: outputPath
},
module: {
rules: [
{ // sass / scss loader for webpack
test: /\.(sass|scss)$/,
loader: [
{
loader: 'style-loader',
options: {
sourceMap: true
}
},
{
loader: 'css-loader',
options: {
url: false,
import: true,
minimize: true,
sourceMap: true,
importLoaders: 1,
}
},
{
loader: 'sass-loader',
options: {
sourceMap: true
}
}
]
},
]
}
};
ExtractTextPlugin
在开发模式下没有任何问题,@Omri Aharon 发布的内容是正确的。但是,您应该考虑 的是仅在开发模式下启用源映射。
要使用其默认生产设置构建 webpack(在 webpack 2.0+ 中默认使用 OccurrenceOrderPlugin 插件),运行 命令 webpack -p
,然后在您的 webpack.config.js
,您可以通过以下方式确定您是否处于开发模式:
const DEBUG = !process.argv.includes('-p');
添加功能
function cssConfig(modules) {
return {
sourceMap: DEBUG,
modules,
localIdentName: DEBUG ? '[name]_[local]_[hash:base64:3]' : '[hash:base64:4]',
minimize: !DEBUG
};
}
在您的 webpack.config.js
中,使您的 scss 加载程序显示为:
test: /\.(sass|scss)$/,
loader: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: [
{
loader: 'css-loader',
options: cssConfig(true)
},
{
loader: 'sass-loader',
options: { sourceMap: DEBUG }
}
]
})
},
我的插件部分有
new ExtractTextPlugin('[name].css?[contenthash]'),