我有以下Webpack配置(大致上,它已经为这篇文章进行了简化):
现在,对于在scss文件中通常引用的图片,这个方法完美地运行:
我认为这是因为CSS加载器定义了
我不确定问题是否出在
我尝试使用不同的webpack配置来指定resolve.root、resolve.modulesDirectories等,但完全不确定它们是否起作用,或者我是不是做法完全错误。我还遇到了
有什么想法吗?谢谢!
更新
我应该注意到,在Safari中它可以正常工作,但在Chrome中却不能。所以它似乎是一个针对Chrome的特定bug,但在Safari中进行所有开发并不现实。
我还遇到了vue-style-loader,它是style-loader的分支,声称可以解决这个问题,但它解决的方法是依赖于一个过时的hacky转义/取消转义方法。
const rootPublic = path.resolve('./public');
const LOCAL_IDENT_NAME = 'localIdentName=[name]_[local]_[hash:base64:5]';
const CSS_LOADER = `css?sourceMap&${LOCAL_IDENT_NAME}&root=${rootPublic}`;
const SASS_LOADER = 'sass?sourceMap&includePaths[]=' + path.resolve(__dirname, './src/styles');
// ... loaders:
loaders: [
{
test: /\.(jpe?g|png|gif|svg)$/,
loader: 'url-loader?limit=10000&name=[path][name].[ext]'
},
{
test: /\.scss$/,
loader: config.DEVELOPMENT_MODE ? `style!${CSS_LOADER}!autoprefixer!${SASS_LOADER}`
: ExtractTextPlugin.extract('style', `${CSS_LOADER}!autoprefixer!${SASS_LOADER}`)
}, // ...
]
现在,对于在scss文件中通常引用的图片,这个方法完美地运行:
.some-static-class {
background: url('/images/bg.png');
}
然而,当使用:local
指令时,它无法正常工作:
:local .SomeClass {
background: url('/images/bg.png');
}
我认为这是因为CSS加载器定义了
root
。我收到一个构建错误:Module not found: Error: Cannot resolve 'file' or 'directory' ./../../../../../../../../images/bg.gif
如果我从css-loader配置中删除root
,那么它可以成功构建,但是当你在新标签页中打开链接时,路径“看起来”在Chrome的检查器中是正确的,但实际上指向:chrome-devtools://devtools/bundled/"/images/bg.png"
,显然无法正确解析。我不确定问题是否出在
url-loader
配置上,也不确定具体发生了什么。我尝试使用不同的webpack配置来指定resolve.root、resolve.modulesDirectories等,但完全不确定它们是否起作用,或者我是不是做法完全错误。我还遇到了
resolve-url-loader
,但不确定那是否是我需要的。有什么想法吗?谢谢!
更新
我应该注意到,在Safari中它可以正常工作,但在Chrome中却不能。所以它似乎是一个针对Chrome的特定bug,但在Safari中进行所有开发并不现实。
我还遇到了vue-style-loader,它是style-loader的分支,声称可以解决这个问题,但它解决的方法是依赖于一个过时的hacky转义/取消转义方法。