Tôi có cấu hình sau Webpack (xấp xỉ, nó đã được đơn giản hóa cho bài này):Không thể giải quyết url tuyệt đối() đường dẫn cho hình ảnh nền trong CSS với Webpack
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}`)
}, // ...
]
Bây giờ này hoạt động hoàn toàn tốt đẹp cho hình ảnh tham chiếu thông thường trong các tập tin SCSS:
.some-static-class {
background: url('/images/bg.png');
}
Tuy nhiên, nó không công việc khi sử dụng :local
chỉ:
:local .SomeClass {
background: url('/images/bg.png');
}
Và tôi nghĩ đó là vì root
được xác định cho trình tải CSS. Tôi gặp phải lỗi xây dựng: Module not found: Error: Cannot resolve 'file' or 'directory' ./../../../../../../../../images/bg.gif
Nếu thay vào đó, tôi xóa root
từ cấu hình css-loader, thì nó sẽ ổn nhưng sau đó bạn thực sự mở liên kết trong tab mới , nó trỏ đến: chrome-devtools://devtools/bundled/"/images/bg.png"
mà rõ ràng là không giải quyết chính xác.
Tôi không chắc chắn nếu sự cố xảy ra với cấu hình url-loader
hoặc những gì đang xảy ra chính xác.
Tôi đã phát xung quanh với các cấu hình webpack khác nhau để chỉ định resolve.root, resolve.modulesDirectories, v.v. nhưng hoàn toàn không chắc chắn nếu chúng có bất kỳ ảnh hưởng nào hoặc nếu tôi chỉ hoàn toàn sai. Tôi cũng đã xem qua resolve-url-loader
nhưng không chắc chắn đó có phải là điều tôi cần chút nào hay không.
Bất kỳ ý tưởng nào? MTIA!
CẬP NHẬT
tôi nên lưu ý rằng nó hoạt động tốt trong Safari, nhưng không phải trong Chrome. Vì vậy, nó có vẻ giống như một lỗi cụ thể của Chrome, nhưng nó không thực tế để làm tất cả phát triển của chúng tôi trong Safari.
Tôi cũng đã xem qua, vue-style-loader, là một nhánh của trình tải kiểu có xác nhận khắc phục sự cố này, nhưng cách khắc phục sự cố đó là dựa vào phương pháp thoát/không sử dụng hacky.
Điều này đã cứu mạng tôi, cảm ơn bạn! – cinnaroll45
@ cinnaroll45 chúc mừng! :) – Sergiu