Die Verwendung von @use 'sass:color' in meiner Vue.js/Vite-App führt dazu, dass über „additionalData' importierte Variablen unbrauchbar werden
P粉478445671
2023-08-17 14:44:11
<p>Ich verwende Vue.js mit Vitest und Sass Loader. </p>
<p>Wenn ich <code>@use 'sass:color'</code> in einer Inline-SCSS-Datei oder -Komponente verwende, scheint es die Variable von <code>vite.config.ts</ zu überschreiben <code>css.preprocessorOptions.scss.additionalData</code> </p>
<p>Das Problem wird hier reproduziert: https://stackblitz.com/edit/vitejs-vite-nk8yf5?file=src%2Fstyle%2Fsample.scss</p>
<p>Zur späteren Bezugnahme lauten die Einstellungen wie folgt: </p>
<p><strong>./src/style/vars.scss</strong></p>
<pre class="brush:php;toolbar:false;">$sample-var: red;</pre>
<p><strong>vite.config.js</strong></p>
<pre class="brush:php;toolbar:false;">import { defineConfig } from 'vite';
vue aus „@vitejs/plugin-vue“ importieren;
// https://vitejs.dev/config/
Standard exportieren defineConfig({
Plugins: [vue()],
CSS: {
Präprozessoroptionen: {
scss: {
zusätzlicheDaten: `@use „./src/style/vars.scss“ als *;`,
},
},
},
});</pre>
<p><strong>./src/style/sample.scss</strong></p>
<pre class="brush:php;toolbar:false;">@use 'sass:color';
.sample-style {
Farbe: $sample-var;
}</pre>
<p><strong>Komponente</strong>:</p>
<pre class="brush:php;toolbar:false;"><script setup>
</script>
<Vorlage>
<div class="sample-style">Hallo Beispielstil</div>
</template>
<style lang="scss" Scoped>
@import '../style/sample.scss';
</style></pre>
<p>Bei Verwendung dieses Codes erhalte ich den Fehler <code>Undefinierte Variable.</code> in <code>$sample-var</code> </p>
<p>Wenn ich jedoch <code>@use 'sass:color';</code> auskommentiere, funktioniert es wie erwartet (ich kann auf <code>$sample-var</code> zugreifen). </p>
<p>Was passiert hier? Wie importiere ich <code>sass:color</code> richtig in meinem Komponentenstil, während ich <code>additionalData</code> in <code>vite.config.js</code> verwende? global? Ich bin daran interessiert, mehr über Best Practices zu erfahren. </p>
在组件的
<style>
标签前,additionalData
中定义的Scss代码会被添加。因此,Sass编译器最终处理的内容是:根据文档,当
sample.scss
不包含任何@use
语句时:这意味着上述代码的评估方式类似于:
然而,根据导入模块系统文件的文档(重点在于我):
$sample-var
是一个模块的成员,因此sample.scss
无法访问$sample-var
。