質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Q&A

解決済

2回答

661閲覧

vue-cliで作成したプロジェクトに共通のsassファイルを読み込む方法について

Kimsehwa

総合スコア312

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

0グッド

0クリップ

投稿2019/04/16 11:41

vue-cliで作ったプロジェクトに以下のようにsassを読み込んで使ってます。

<template> <div class="info">test</div> </template> <script> </script> <style lang="sass"> .info { font-size: 50px; } </style>

ここに記載したsassファイルを
.vueファイルに直接記載せず自動的に読み込むませるため

rootディレクトリ直下にsrc/test.scssを作って.info { font-size: 50px; }この設定を入れました。

そしてvue.config.jsを以下のように設定してnpm run serveしましたが、scssは読み込んでくれませんでした。

module.exports = { css: { loaderOptions: { // pass options to sass-loader sass: { // @/ is an alias to src/ // so this assumes you have a file named `src/variables.scss` data: `@import "./src/test.scss";` } } } };

自分の設定で誤りがありましたらご指摘いただけますでしょうか。
エラーとかも吐いてくれないですが、webpackの設定がうまく動いてない場合、トラブルシューティングする方法も
知りたいです。

現在失敗してるコードはこちらにまとめておきました。

https://github.com/negabaro/vue-import-scss-example/blob/master/vue.config.js#L8

以上、よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

sass-loaderのdataオプションはエントリファイルのsassコードを先頭に追加する(prepend Sass code before the actual entry file)オプションのようです。
https://github.com/webpack-contrib/sass-loader#environment-variables

App.vueに以下を記載するなどして、sassのエントリファイルが生成されるようにする。

html

1<style lang="sass">/* */</style>

ただ、そもそもsass-loaderのdataオプションではなく、main.jsに以下を記載するのではダメなのでしょうか。

javascript

1import './test.scss';

投稿2019/04/17 01:21

wtokuno

総合スコア448

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kimsehwa

2019/04/17 03:29

教えてただいた方法でimportできました。ありがとうございます。 というのはwebpackに記述せずにsrc/main.jsに記述しても問題ないというこですか? なんで2つの方法があるのかよくわかりませんでした。。
wtokuno

2019/04/17 04:15

JavaScript の import でスタイルを読み込む方法は style-loader の機能です。 .vue ファイルに <style> を書く方法は vue-loader の機能です。 この2つの方法ではページの <head> タグに <style> タグを追加することでスタイルを適用します。 sass-loader の data オプションは (当然ながら) sass-loader の機能です。 この機能は sass-loader が処理する際、各 sass ファイルの先頭に共通のコード片を付け足す機能です。 sassファイルが10個あったら10個の sassファイルそれぞれの先頭に追加されます。 sass-loader のページにも説明があるように、環境変数などのパラメータを sass のファイルに渡すのが 主要な目的の機能です。 というので回答になります?
guest

0

公式サイトの通り、かつご提示されているコードのコメントの通りですが、@/src/の別名ですので、これを利用します。

module.exports = { css: { loaderOptions: { sass: { data: `@import "@/test.scss";` } } } };

2019/04/18 追記

すでに他の方の回答で解決しているようですが、補足します。
ご提示されているGithubのコードをダウンロードして動作確認しましたが、普通に動きますね。

おそらくですが、以下のいずれかに該当していませんか?

  1. yarn run serveしたままで、vue.config.jsを編集した(再起動していない)
  2. vueファイルの<style>lang="sass"またはlang="scss"を指定していない

1の場合、vue.config.jsの変更・保存は監視されていないので即時反映はされません。
2の場合、スタイル部分がCSSとして処理されるので、vue.config.jsのsass関連のオプションは無視されます。

投稿2019/04/16 15:02

編集2019/04/17 15:52
NozomuIkuta

総合スコア1260

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kimsehwa

2019/04/16 22:45

aliasを使っても問題は解決できませんでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問