Nuxtでvuetifyを使用するとdart-sassの@useでエラーが出る
本題の通りで、Nuxtでvuetifyを使用するとdart-sassの@use
でエラーが出るんです。。
その経緯と、解決方法についてまとめました。
環境
MacBook Pro (13-inch, M1, 2020)
macOS Monterer バージョン12.0.1
node -v 16.11.0
yarn -v 1.22.17
ひとまずyarn create app
create-nuxt-app v4.0.0
✨ Generating Nuxt.js project in test5
? Project name: test
? Programming language: JavaScript
? Package manager: Yarn
? UI framework: Vuetify.js
? Nuxt.js modules: (Press <space> to select, <a> to toggle all, <i> to invert selection)
? Linting tools: (Press <space> to select, <a> to toggle all, <i> to invert selection)
? Testing framework: None
? Rendering mode: Universal (SSR / SSG)
? Deployment target: Static (Static/Jamstack hosting)
? Development tools: (Press <space> to select, <a> to toggle all, <i> to invert selection)
? What is your GitHub username? suzu nagano
? Version control system: Git
上記参考に以下でsass追加
yarn add --dev sass sass-loader@10
ここまでのpackage.json
"dependencies": {
"core-js": "^3.19.3",
"nuxt": "^2.15.8",
"vue": "^2.6.14",
"vue-server-renderer": "^2.6.14",
"vue-template-compiler": "^2.6.14",
"vuetify": "^2.6.1",
"webpack": "^4.46.0"
},
"devDependencies": {
"@nuxtjs/vuetify": "^1.12.3",
"sass": "^1.49.9",
"sass-loader": "10"
}
ここまでのnuxt.config.js(追記などはしていない)
// Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules
buildModules: [
// https://go.nuxtjs.dev/vuetify
'@nuxtjs/vuetify',
],
// Modules: https://go.nuxtjs.dev/config-modules
modules: [
],
// Vuetify module configuration: https://go.nuxtjs.dev/config-vuetify
vuetify: {
customVariables: ['~/assets/variables.scss'],
theme: {
dark: true,
themes: {
dark: {
primary: colors.blue.darken2,
accent: colors.grey.darken3,
secondary: colors.amber.darken3,
info: colors.teal.lighten1,
warning: colors.amber.base,
error: colors.deepOrange.accent4,
success: colors.green.accent3
}
}
}
},
style追加
ここでassets/style.scss
を作成
pages/index.vueに以下追記
<style lang="scss" scoped>
@use "/assets/style.scss";
</style>
ここでyarn dev
すると…
ERROR Failed to compile with 1 errors friendly-errors 19:52:09
ERROR in ./pages/index.vue?vue&type=style&index=0&id=2a183b29&lang=scss&scoped=true& friendly-errors 19:52:09
Module build failed (from ./node_modules/sass-loader/dist/cjs.js): friendly-errors 19:52:09
SassError: @use rules must be written before any other rules.
╷
88 │ @use "/assets/style.scss";
│ ^^^^^^^^^^^^^^^^^^^^^^^^^
╵
pages/index.vue 88:1 root stylesheet
friendly-errors 19:52:09
@ ./node_modules/vue-style-loader??ref--7-oneOf-1-0!./node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--7-oneOf-1-2!./node_modules/sass-loader/dist/cjs.js??ref--7-oneOf-1-3!./node_modules/vue-loader/lib??vue-loader-options!./pages/index.vue?vue&type=style&index=0&id=2a183b29&lang=scss&scoped=true& 4:14-391 15:3-20:5 16:22-399
@ ./pages/index.vue?vue&type=style&index=0&id=2a183b29&lang=scss&scoped=true&
@ ./pages/index.vue
@ ./.nuxt/router.js
@ ./.nuxt/index.js
@ ./.nuxt/client.js
@ multi ./node_modules/eventsource-polyfill/dist/browserify-eventsource.js (webpack)-hot-middleware/client.js?reload=true&timeout=30000&ansiColors=&overlayStyles=&path=%2F__webpack_hmr%2Fclient&name=client ./.nuxt/client.js
エラーがでる。。。
vuetify公式によると…以下の設定を追記せよとのこと
treeShake: true
nuxt.config.js
// Vuetify module configuration: https://go.nuxtjs.dev/config-vuetify
vuetify: {
customVariables: ['~/assets/variables.scss'],
treeShake: true, // ※※※ ここに追記 ※※※
theme: {
dark: true,
themes: {
dark: {
primary: colors.blue.darken2,
accent: colors.grey.darken3,
secondary: colors.amber.darken3,
info: colors.teal.lighten1,
warning: colors.amber.base,
error: colors.deepOrange.accent4,
success: colors.green.accent3
}
}
}
},
ここで再度yarn dev
する。
だが、同様のエラーがでる。。。
なんでや。。。
解決方法
nuxt.config.jsに以下追記
// Build Configuration: https://go.nuxtjs.dev/config-build
build: {
loaders: { // なくても動いた
scss: {
implementation: require('sass'),
}
},
extend (config) {
config.module.rules.push({
test: /\.scss$/,
loader: "sass-loader",
exclude: /(node_modules)/,
options: {
additionalData: "",
},
})
}
}
原因的な何か
node_modules/@nuxtjs/vuetify/dist/sass.js
ここで以下の処理をおこなっているよう…
// Custom variables
if (customVariables && customVariables.length > 0) {
const sassImports = customVariables
.map(path => `@import '${path}'`)
.join('\n');
sass.additionalData = [sass.additionalData, sassImports].join('\n');
const scssImports = customVariables
.map(path => `@import '${path}';`)
.join('\n');
scss.additionalData = [scss.additionalData, scssImports].join('\n'); ★ココ
}
★部分をコメントアウトするとうまくいく…?
ただ、node_modules配下に手を入れるわけにもいかず…
vuetifyで追加されたscss.additionalData
をnuxt.config.js
で更に上書きして空にするとうまくいきました。
とりあえずうまくいっているけど本当に謎。。。
1週間くらい悩みました。。。
いやぁ〜〜本当に謎(二度目)
みなさんNuxt+vuetify+dart-sassってどうしてるんですかね
Author And Source
この問題について(Nuxtでvuetifyを使用するとdart-sassの@useでエラーが出る), 我々は、より多くの情報をここで見つけました https://qiita.com/sszzszsz/items/f37159520d6eea0782a9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .