Vue.jsコンポーネント内のwebpacker gemからアセットにアクセスする方法を教えてください。例-背景画像を使用してdivを作成する方法。/app/assets/imagesおよび/ app/javascripts/assetsフォルダーを使用しようとしましたが、画像はテンプレートセクションでのみ使用でき、スタイルセクションでは使用できません:(
私の場合
<template>
<div id="home">
<div id="intro">
<img src="assets/cover-image-medium.png" alt="">
</div>
</div>
</template>
正常に動作しますが、
<style scoped>
#intro {
height: 200px;
background: url("assets/cover-image-medium.png");
}
</style>
動作しません:(
どうしましたか?
新しいRailsのWebpackerのものはかなり未加工なので、それが私にとって機能する構成です:
config/webpacker.yml(webpacker 3の場合):
resolved_paths: ['app/javascript/images', 'app/javascript/src']
compile: false
# ...
JSファイル:
/app
/javascript
/packs
# only entry point files
vue_application.js
/src
some_component.vue
/images
logo.svg
コンポーネント:
<script>
import 'images/logo.svg'
</script>
テンプレート内:
<img src='~images/logo.svg' />
ここでチルドを指す-それは画像がモジュールの依存関係であることを意味します
cSS:
<style lang='sass'>
#app
background: url('../images/logo.svg')
</style>
何らかの理由でチルドはここでは機能しないため、相対パスが使用されます。
質問を正しく理解した場合、build
フォルダ内の_webpack.base.conf.js
_ファイルを見つけて、次のようなコードを見つける必要があります。
_resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src')
}
}
_
次に、alias
オブジェクトに次の行を追加します:'assets': resolve('src/assets/')
。これは、assets
フォルダーの直下にあるsrc
フォルダーで機能します。キー文字列をassets
から任意のエイリアス名に変更することもできます。
編集:
私は言及するのを忘れていましたスタイルコードでエイリアスにアクセスするには、assets
が_~
_になるように、その前に_~assets
_(telda)を付ける必要があります。
あなたが試すことができます
background: url("/assets/cover-image-medium.png");
の代わりに
background: url("assets/cover-image-medium.png");
これはVue.jsでタグ付けされているので、それに答えます。他の回答はすべてVue 2.x.
Webpacker require
ステートメントは、必要なアセットの完全なURLを返します(_resolved_paths
_内の_webpacker.yml
_に基づいて解決されます)。これに基づいて、次のようなことができます:
_<img :src="require('images/what-a-pain.png')" alt="Finally working" />
_
コロンがsrc
属性をJavaScript式の結果にバインドすることに注意してください。
IDアンカーは、SVGなどを使用して追加することで使用することもできます。
_<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<use :href="require('images/icons.svg') + '#copy'" />
</svg>
_
通常、Vueテンプレートは同等のJavaScriptにプリコンパイルされているため、アセットを実行時にではなくコンパイル時にプルするには、require
ステートメントが必要です。
urls
の場合、スコープ付きかどうかチルダ_~
_とパスを使用するだけです。パスは、それを含むファイルまたは_resolved_paths
_からの_webpacker.yml
_へのrelativeでなければなりません。
_.relative-pathed {
background: url(~../../../assets/images/quitethepath.svg) center center no-repeat;
}
.works-after-editing-webpackeryml {
background: url(~images/quitethepath.svg) center center no-repeat;
}
_
この使用方法では、アセットをrequire()
する必要はありません。
注意:特にSprocketsを使用している場合は、開発と製造のパスに違いがあります。単に_src="/assets/image.png"
_を実行すると、開発で機能する場合がありますただし、プロダクションではありません。
sass-Rails
gemをインストールしている場合は、これを試してください。
<style scoped>
#intro {
height: 200px;
background: image-url("cover-image-medium.png");
}
</style>