使用 Webpacker 和 Rails 导入 npm 包的图像
Import images of an npm package with Webpacker and Rails
我正在尝试使用 yarn
和 webpacker
安装软件包 lightslider。
这是我目前所做的:
yarn add lightslider
// app/webpacker/packs/application.js
require('lightslider');
// app/webpacker/src/application.scss
@import '~lightslider/dist/css/lightslider.min';
但是,由于以下错误,Webpack 编译失败:
Module not found: Error: Can't resolve '../img/controls.png'
这是lightslider正常工作需要的图片,位于node_modules/lightslider/dist/img/controls.png
:
// node_modules/lightslider/dist/css/lightslider.css
.lSAction > a {
width: 32px;
display: block;
top: 50%;
height: 32px;
background-image: url('../img/controls.png');
cursor: pointer;
position: absolute;
z-index: 99;
margin-top: -16px;
opacity: 0.5;
-webkit-transition: opacity 0.35s linear 0s;
transition: opacity 0.35s linear 0s;
}
如何将此图像导入我的包中以便 lightslider 找到它?
来自 WebpackER 文档:https://github.com/rails/webpacker/blob/76b491750993fada8b0b0cc2546dfcfbc4aaae13/docs/css.md#resolve-url-loader
Since Sass/libsass does not provide url rewriting, all linked assets must be relative to the output. Add the missing url rewriting using the resolve-url-loader. Place it directly after the sass-loader in the loader chain.
// webpack/environment.js
const { environment } = require('@rails/webpacker')
// resolve-url-loader must be used before sass-loader
environment.loaders.get('sass').use.splice(-1, 0, {
loader: 'resolve-url-loader'
});
我能够 reproduce/fix 您描述的问题 without/with 使用 @rails/webpacker@4.0.7
和 resolve-url-loader@3.1.0
进行上述修改。
我正在尝试使用 yarn
和 webpacker
安装软件包 lightslider。
这是我目前所做的:
yarn add lightslider
// app/webpacker/packs/application.js
require('lightslider');
// app/webpacker/src/application.scss
@import '~lightslider/dist/css/lightslider.min';
但是,由于以下错误,Webpack 编译失败:
Module not found: Error: Can't resolve '../img/controls.png'
这是lightslider正常工作需要的图片,位于node_modules/lightslider/dist/img/controls.png
:
// node_modules/lightslider/dist/css/lightslider.css
.lSAction > a {
width: 32px;
display: block;
top: 50%;
height: 32px;
background-image: url('../img/controls.png');
cursor: pointer;
position: absolute;
z-index: 99;
margin-top: -16px;
opacity: 0.5;
-webkit-transition: opacity 0.35s linear 0s;
transition: opacity 0.35s linear 0s;
}
如何将此图像导入我的包中以便 lightslider 找到它?
来自 WebpackER 文档:https://github.com/rails/webpacker/blob/76b491750993fada8b0b0cc2546dfcfbc4aaae13/docs/css.md#resolve-url-loader
Since Sass/libsass does not provide url rewriting, all linked assets must be relative to the output. Add the missing url rewriting using the resolve-url-loader. Place it directly after the sass-loader in the loader chain.
// webpack/environment.js
const { environment } = require('@rails/webpacker')
// resolve-url-loader must be used before sass-loader
environment.loaders.get('sass').use.splice(-1, 0, {
loader: 'resolve-url-loader'
});
我能够 reproduce/fix 您描述的问题 without/with 使用 @rails/webpacker@4.0.7
和 resolve-url-loader@3.1.0
进行上述修改。