変数などを使用するために、すべての.vueファイルでこの同じパターンを繰り返していることに気付きました。
<style lang="scss">
@import "../styles/settings.scss";
.someclass { color: $some-variable; }
</style>
または、フォルダにネストされている場合は、パスに注意する必要があります:
<style lang="scss">
@import "../../styles/settings.scss";
</style>
私が作成するすべての.vueファイルにそのsettings.scss
ファイルをグローバルにインポートする方法はありますか?私はドキュメントを見ましたが見ませんでしたが、見逃したかもしれませんか、またはこれはwebpackを活用するために必要なものですか?
この質問をしてから公式ドキュメントが更新されました: https://vue-loader.vuejs.org/en/configurations/pre-processors.html
2017年以降にこれを見る人は、「グローバル設定ファイルの読み込み」の手順をご覧ください。
私はしばらくの間、同じ質問に苦労してきました。しかし、本当に簡単な修正があります。この機能は、node-sass自体を通じて提供されます。
そのため、パス内の_globals.scss
_などのファイルでscssグローバルを宣言できます。
_/src/scss/globals.scss
_
これで、_vue-loader
_設定を簡単に編集できます。
_loaders: {
sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1&data=@import "./src/scss/globals"',
scss: 'vue-style-loader!css-loader!sass-loader?data=@import "./src/scss/globals";'
}
_
そして出来上がり!すべてのvueコンポーネントでscssグローバルを使用できます。お役に立てば幸いです!
更新:
Vueの新しいリリースでは、多くの設定が更新されています。したがって、最新のvueプロジェクトでは、上記の変更は些細なように見えるかもしれません。
ショートバージョン:
メソッドを含む_build/utils.js
_を見つけます(ほとんどの場合、cssLoaders()
という名前です)。このメソッドは、次のようなオブジェクトを返します。
_return {
...
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
...
}
_
_scss/sass
_固有の行を次のように変更するだけです。
_ return {
...
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders(['css', 'sass?data=@import "~assets/styles/app";']),
...
}
_
ロングバージョン:
_webpack.base.conf.js
_には_vue-loader
_が含まれています。次のようになります。
_ ...
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
...
_
vueLoaderConfig
変数は、このオブジェクトと等しい_vue-loader.conf.js
_ファイルからインポートされます。
_ {
loaders: utils.cssLoaders( Obj ), // actual settings coming from cssLoader method of build/utils.js
transformToRequire: {
//some key value pairs would be here
}
}
_
_build/utils.js
_ファイルには、...を返すcssLoaders()
メソッドがあります。
_ return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
_
次のように、更新されたscss
構成で上記のコードを更新するだけです。
_ ...
{
...
scss: generateLoaders(['css', 'sass?data=@import"~assets/scss/main";']),
...
}
...
_
したがって、_src/assets/scss/main.scss
_ファイルに記述された変数/ミックスインは、すべてのコンポーネントで使用できます。
あなたはwebpackを使用していると思いますか? app.jsファイルに次のようなsettings.scss
ファイルを要求できます。
require("!style!css!sass!./file.scss");
したがって、コンパイルされたとき。すべてのコンポーネントが取得します。それらのそれぞれにそれを要求する必要はありません。
Vue webpackテンプレートを使用する場合は、_build/utils.js
_の1行のコードで修正できます:scss: generateLoaders(['css', 'sass?data=@import "~assets/styles/app";'])
次に、_src/assets/styles/app
_で、すべての@importsとvoilàを追加します!
ファイルをグローバルにインポートできるとは思わない。私はおそらくとにかくこれをしないだろう、それは十分に明確ではありません。誰かがそのコンポーネントを別のプロジェクトに移動したい場合、noはそのファイルに依存していると考えます。
ただし、パス管理をはるかに簡単にすることができます。これをwebpack設定ファイルに追加できます...
sassLoader: {
includePaths: [
path.resolve(__dirname, './sass')
]
},
その後、プロジェクトルート/sass
ディレクトリをパスを気にせずに自由に。
Vue CLIを使用している場合は、 https://cli.vuejs.org/guide/css.html#css-modules をお読みください。例:
// vue.config.js
const fs = require('fs')
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 "@/variables.scss";`
}
}
}
}
これは私のために完全に修正しました。
すべてのコンポーネントを同じディレクトリに保存する場合、settings.scssへのパスは常に同じままです。
これはwebpackの望ましい機能です。原則は、グローバルをできるだけ少なくし、必要なもののみを含めて、プロジェクトを無駄のない、効率的で、推論しやすいものにすることです。
おそらく、各Vueコンポーネント(独自のブートストラップを作成しますか?)すべてのVueコンポーネント内のスタイルシート。
これは本当にあなたの質問に答えるわけではありませんが、それはあなたが一緒に働くことを選んだツールの背後にある原則に合わせることにあなたを導くかもしれません。
幸運を祈ります!
そこにいた-残念ながら、各コンポーネントにファイルをインポートせずにこれを行う方法はありません。これを回避するには、ユースケースの一部をカバーするcolor: $some-variable
およびbackground-color: $some-variable
を使用してヘルパークラスを作成してみてください。
各ファイルをインポートする場合は、必ず変数のみが含まれるようにしてください。スタイルルールを複数回含める必要はありません。
それ以外の場合は、コンポーネントごとに個別の.scss
ファイルを作成します。 htmlとjsには引き続き.vue
テンプレートを使用できますが、スタイルは別にしてください。これがおそらく最も効率的な方法です。
私の解決策はsettings.scss
ファイルのフォルダーはwebpackのエイリアス、
多分 settings.scss
はグローバルなニーズではありません。多分あなたは同様のsetting2.scssファイルも必要ですが、settings.scss
はsetting2.scssと競合します。この場合、ファイルの導入のみを選択できます。
このようなwebpack設定:
resolve: {
alias: {
'~src': path.resolve(__dirname, '../src'),
'~styles': path.resolve(__dirname, '../src/styles'),
}
そのため、settings.scss
コンポーネント内
<style lang="scss">
@import "~styles/settings.scss";
</style>