Language-tools: スタむルタグの `lang`属性がSvelteベヌタ版からの譊告をトリガヌしたす

䜜成日 2020幎05月29日  Â·  30コメント  Â·  ゜ヌス: sveltejs/language-tools

バグを説明する
コンポヌネントの<style>タグでlang属性を指定するず、Svelte Beta forVSCodeは次の譊告を出したす。

The file cannot be parsed because script or style require a preprocessor that doesn't seem to be setup. Did you setup a `svelte.config.js`? See https://github.com/sveltejs/language-tools/tree/master/packages/svelte-vscode#using-with-preprocessors for more info.

これは、コンポヌネント<style> lang属性を指定した堎合にのみ発生したす。 lang属性が<style>タグから削陀されるず、コンポヌネント<script>タグにlang属性があるかどうかに関係なく、譊告は消えたす。

再珟するには
動䜜を再珟する手順

  1. degit svelte/template-webpackを䜿甚しお、新しいSvelte + Webpackプロゞェクトを䜜成したす。
  2. TypeScript、Node Sass、およびSvelte Preprocessをむンストヌルしたす npm i -D typescript node-sass svelte-preprocess
  3. svelte.config.jsを䜜成したす。
const sveltePreprocess = require('svelte-preprocess')

module.exports = {
  preprocess: sveltePreprocess()
}
  1. VSCodeでSvelteベヌタを再起動したす
  2. 远加lang="scss"に<style>でタグsrc/App.svelte
  3. ファむルを保存。 Svelte Betaの譊告は<script>タグに衚瀺されたす

予想される行動
SvelteBetaが譊告や゚ラヌを返さないこずを期埅したした。

スクリヌンショット
SvelteWarning
SvelteWarning001
SvelteWarning002
SvelteWarning003

システム

  • OSWindows 10
  • IDEVSCode 1.45.0
  • プラグむン/パッケヌゞ「SvelteBeta」

远加のコンテキスト
頻繁に掚奚される/明らかに機胜しなかった修正

  • _double、triple、およびquadrupleは、プロゞェクトのルヌトにsvelte.config.jsファむルがあるこずを確認したした。_
  • Node.jsぞのパスにランタむムを蚭定しようずしたした C:\Program Files\nodejs\node.exe
  • svelte.config.jsの次のバリアントを詊したした。
const sveltePreprocess = require('svelte-preprocess')

module.exports = {
  preprocess: [sveltePreprocess()]
}

`` `js
const sveltePreprocess = require 'svelte-preprocess'

module.exports = {
前凊理sveltePreprocess{
sasstrue
}
}

```js
const sveltePreprocess = require('svelte-preprocess')

module.exports = {
  preprocess: sveltePreprocess({
    sass: true,
    typescript: true
  })
}
  • Webpack構成は、 svelte.config.jsによっお゚クスポヌトされた前凊理オプションを䜿甚し、゚ラヌや譊告なしでSvelteコヌドをコンパむルしたす。

最も参考になるコメント

私はこれを詊したしたが、 @ dummdidummが提案したように、 svelte.language-server.runtime蚭定するこずで、発生した問題を修正できたす。
@JoeBobMilesは、jsファむルでnode-sassを芁求し、ノヌドを䜿甚しおファむルを実行しお、゚ラヌがあるかどうかを確認するこずができたす。

const nodeSass = require('node-sass')

console.log(nodeSass)

党おのコメント30件

これは私にも起こりたす。 src="./xxx.scss"を介しおむンポヌトされたスタむルの蚀語を指す蚀語たたは詳现を無効にするず、システムはペヌゞの最初でそれに぀いお文句を蚀うのをやめたす。

これはscssで発生するため、このようなノヌド-sassの問題であるず確信しおいたす。

VSCodeで[出力]-> [Svelte]を開き䞋郚に衚瀺され、端末もありたす、゚ラヌを再珟しお、出力をここに貌り付けおください。

おそらく関連32

Node-sassをロヌカルおよびグロヌバルで䜕も行わなかったため、䜕床かリロヌドした埌でも結果は倉わりたせんでした。

これはSvelteの出力です曎新されたバヌゞョンのバグではプロゞェクトをアップグレヌドできないため、3.20.1があるこずに泚意しおください。これも報告されおいたす

loading config for /PATH/TO/PROJECT/src/Button.svelte
Using Svelte v3.20.1 from /PATH/TO/PROJECT/node_modules/svelte/compiler
Using Svelte v3.20.1 from /PATH/TO/PROJECT/node_modules/svelte/compiler
loading config for /PATH/TO/PROJECT/node_modules/@smui/common/H6.svelte
Using Svelte v3.20.1 from /PATH/TO/PROJECT/node_modules/svelte/compiler
Using Svelte v3.20.1 from /PATH/TO/PROJECT/node_modules/svelte/compiler
loading config for /PATH/TO/PROJECT/src/App.svelte
Using Svelte v3.20.1 from /PATH/TO/PROJECT/node_modules/svelte/compiler
Using Svelte v3.20.1 from /PATH/TO/PROJECT/node_modules/svelte/compiler
loading config for /PATH/TO/PROJECT/src/App.svelte
Using Svelte v3.20.1 from /PATH/TO/PROJECT/node_modules/svelte/compiler
Using Svelte v3.20.1 from /PATH/TO/PROJECT/node_modules/svelte/compiler
loading config for /PATH/TO/PROJECT/src/App.svelte
Using Svelte v3.20.1 from /PATH/TO/PROJECT/node_modules/svelte/compiler
Using Svelte v3.20.1 from /PATH/TO/PROJECT/node_modules/svelte/compiler

リンティングSCSSは関連しおいる可胜性があり、むンラむンSCSSを䜿甚しおいたずきにも䜿甚しおいたしたが、補足ずしお、これぱラヌではなく、ファむルの先頭にある譊告です。 SCSSを解析する必芁はありたせん。

私はこのhtmlxparser.tsに関連するものだず思いたす

@dummdidummこのバグを投皿する前に実際にその出力を確認したしたが、

これはscssで発生するため、このようなノヌド-sassの問題であるず確信しおいたす。

私はそれが事実であるこずに懐疑的ですが、私は調査しお、私が芋぀けたものを確認したす。

@Egnusの出力から、 svelte.config.jsが芋぀かったず掚枬できたす。 構成が芋぀からないが必芁な堎合 lang / typeがscript / style 、 No svelte.config.js found but one is neededメッセヌゞログに衚瀺されたす。
たた、前凊理が行われおいないため、 svelte2tsxのhtmlxparserずは䜕の関係もありたせん。 svelteコンパむラから蚺断を取埗しようずしおいるずきにたす。

Svelteの出力を確認したずきに取埗したログは次のずおりですパスは匿名化されおいたす。VSCodeで衚瀺されたずきのスラッシュ。

Initialize language server at c:/PATH/TO/PROJECT/
Initialize new ts service at  
loading config for c:/PATH/TO/PROJECT/src/App.svelte
Using Svelte v3.22.3 from c:\PATH\TO\PROJECT\node_modules\svelte\compiler
Using Svelte v3.22.3 from c:\PATH\TO\PROJECT\node_modules\svelte\compiler
loading config for c:/PATH/TO/PROJECT/src/App.svelte
Using Svelte v3.22.3 from c:\PATH\TO\PROJECT\node_modules\svelte\compiler
Using Svelte v3.22.3 from c:\PATH\TO\PROJECT\node_modules\svelte\compiler
loading config for c:/PATH/TO/PROJECT/src/App.svelte
Using Svelte v3.22.3 from c:\PATH\TO\PROJECT\node_modules\svelte\compiler
Using Svelte v3.22.3 from c:\PATH\TO\PROJECT\node_modules\svelte\compiler
loading config for c:/PATH/TO/PROJECT/src/App.svelte
Using Svelte v3.22.3 from c:\PATH\TO\PROJECT\node_modules\svelte\compiler
Using Svelte v3.22.3 from c:\PATH\TO\PROJECT\node_modules\svelte\compiler
loading config for c:/PATH/TO/PROJECT/src/App.svelte
Using Svelte v3.22.3 from c:\PATH\TO\PROJECT\node_modules\svelte\compiler
Using Svelte v3.22.3 from c:\PATH\TO\PROJECT\node_modules\svelte\compiler

@EgnusのVSCode出力ずほが同じですが、 Initializing new ts service at远加を陀いお。 それが結果であるかどうかはわかりたせんが、メッセヌゞ間のスラッシュの亀代は私には際立っおいたす。

たた、node-sassが私のバヌゞョンのWindowsおよびNode.jsず互換性があるこずを再確認したした。 node-sass v4.14.1珟時点での最新リリヌスは、私のバヌゞョンのノヌドv13.7ず互換性がありたす。

もう䞀床確認しおいただけたすか その領域でより倚くのログを蚘録する曎新をプッシュし、ナヌザヌ向けの゚ラヌメッセヌゞも少し曎新したした。

䞊蚘のコミットを参照しおいたすか もしそうなら、私はコミットがマヌゞされた埌にチェックし、チェックする前に新しいアップデヌトをむンストヌルしたした。

拡匵機胜は毎晩、前回は玄8時間前に公開されるため、14時間前のログは「叀い」バヌゞョンである可胜性がありたす。

ああ、なるほど。 次にできるずきに新しいログを取埗したす。

数時間前にもチェックしたす

うヌん面癜い、あなたは正しかった

Preprocessing failed
Error: Cannot find any of modules: node-sass,sass
    at Object.exports.importAny (/PATH/TO/PROJECT/node_modules/svelte-preprocess/dist/utils.js:1:2844)

svelte.config.jsが䜿甚されおいない理由を確認しお戻っおきたす

さお、 svelte-preprocessはVSCodeによっおグロヌバルでもロヌカルでもnode-sass芋぀けられないようです。 同じRollupConfigが次のsvelte.config.jsむンポヌトしたすが。

// svelte.config.js
const sveltePreprocess = require('svelte-preprocess');

module.exports = {
  preprocess: sveltePreprocess({
    scss: {
      includePaths: ['x', 'y', 'z'],
    },
    typescript: {
      extensions: ['x', 'y', 'z'],
      includePaths: ['x', 'y', 'z'],
    },
  }),
  // ...other svelte options
};

// The following alternative should make SCSS to work but nothing else will. Why the auto preprocess does not work here?

// import sass from 'node-sass';
// module.exports = {
//   preprocess: {
//     style: async ({ content, attributes }) => {
//       if (attributes.type !== 'text/scss') {
//         return;
//       }

//       const result = await sass.renderSync({
//         data: content,
//         sourceMap: 'style.css.map',
//         omitSourceMapUrl: true,
//       });

//       return {
//         code: result.css.toString('utf8'),
//         map: result.map.toString('utf8'),
//       };
//     },
//   },
// };

Svelte Betaの問題である可胜性がありたすか 前凊理を自分で䜜成する以倖に、この時点でノヌド-sassのパスをVSCodeに䌝える方法がわかりたせん。

私はこれをマスタヌで取埗しおいたすが、コンピュヌタヌにnode-sassがむンストヌルされおいないず思いたす。 Typescriptは機胜しおいたす!!!これはかなり厄介なリント譊告です。

.
├── home.svelte
├── node_modules
│   ├── <strong i="6">@types</strong>
│   ├── detect-indent
│   ├── min-indent
│   ├── strip-indent
│   └── svelte-preprocess
├── package-lock.json
├── package.json
└── svelte.config.js

home.svelte

<script lang="typescript">
  export let title: string = "10";
</script>

<style>
  h2 {
    background: blue;
  }
</style>

<html lang="en">
  <h2>{parseInt(title, 10)}</h2>
</html>

svelte.config.js

const sveltePreprocess = require('svelte-preprocess')

module.exports = {
  preprocess: sveltePreprocess(),
}

CleanShot 2020-06-02 at 21 37 06@2x

これを絞り蟌むために、さらに䜕かをテストしおください。


たた、❀ svelte.config.jsを削陀しお、いく぀かの䞀般的な構成を焌き付けたす。これを実珟するためにPRを開いおください。 線集、私は_think_https //github.com/sveltejs/language-tools/pull/87これを実珟させたした👏

mm䞍思議な@matthewmueller 、拡匵機胜の

あはは ポむンタをありがずう

さお、これは私がただ遊んでいお、実際のアプリでこれをただテストしおいなかったこずを明らかにしたす😆

埌から明らかな2぀の暗黙の䟝存関係がありたすが、譊告はあなたを迷わせたす

  1. ゚ラヌモゞュヌル 'svelte /package.json'が芋぀かりたせん
  2. ゚ラヌ[svelte-preprocess]「typescript」の倉換䞭に゚ラヌが発生したした。 モゞュヌル 'typescript'が芋぀かりたせん

VSCodeがTypescriptで機胜するのず同じように、フォヌルバックTypescriptずSvelteを提䟛しお、人々がすばやく遊んでくれるようにするずいいず思いたす。

これを焌き付けるこずに぀いお私もこれに぀いお考えたしたが、svelteコミュニティはすでにカスタムプリプロセッサに慣れすぎおいるのではないかず思いたす。 これらすべおをプラグむン内に持぀ずしたら、これはnode-sass、less、babelなどの䟝存関係を远加しおむンストヌルするこずを意味したす。これはプラグむンを膚らたせたす。

特定の問題に戻るず、2぀の問題がありたす。

  1. モゞュヌルの解像床が台無しになるこずがありたす。 なぜ調査が必芁なのですか。 たた、yarnのpnpなどのセットアップが機胜しおいないこずにも泚意しおください。
  2. node-sassは、䜿甚されるノヌドのバヌゞョンに非垞に敏感です。 私にずっおは、svelteベヌタ蚭定のランタむム環境を、アプリの他の郚分でも䜿甚されるノヌド実行可胜ファむルに蚭定するだけで垞に十分です。 そうしないず、VSCodeのノヌドバヌゞョンが䜿甚され、䞀臎しない可胜性がありたす。

@dummdidumm私はあなたの感情を感じたすが、個人的にはhttps //news.ycombinator.com/item

私は個人的に䞀流のbabelサポヌトをスキップしお、どれだけの人が䞍満を蚀っおいるかを確認したす。構成には非垞に倚様性があり、サポヌト的にワヌムの猶を開く可胜性がありたす。

たた、このような党䌚䞀臎のサポヌトに到達したCSS゜リュヌションはないず思いたす。 たた、Svelteはすでに優れたスコヌプのCSS゜リュヌションを提䟛しおいるので、型付きのjavascriptほど必芁ではないず思いたす。

あはは ポむンタをありがずう

さお、これは私がただ遊んでいお、実際のアプリでこれをただテストしおいなかったこずを明らかにしたす😆

埌から明らかな2぀の暗黙の䟝存関係がありたすが、譊告はあなたを迷わせたす

1. Error: Cannot find module 'svelte/package.json'

2. Error: [svelte-preprocess] Error transforming 'typescript'. Cannot find module 'typescript'

VSCodeがTypescriptで機胜するのず同じように、フォヌルバックTypescriptずSvelteを提䟛しお、人々がすばやく遊んでくれるようにするずいいず思いたす。

package.jsonのこずは興味深いので、それを確認する必芁がありたす。 プラグむンの組み蟌みのsvelteバヌゞョンにフォヌルバックする必芁がありたす。 それずは別に、これは今日すでにタむプスクリプトに察しおのみ機胜したす。 svelte.config.jsを完党に削陀する必芁がありたす。 フォヌルバックが䜿甚され、タむプスクリプトを凊理できるはずですが、それ以䞊は凊理できたせん。 珟圚、その領域の倉動が倧きすぎるため、これは文曞化されおいたせん。

うん、これはすごい svelte.config.jsを削陀し、 svelteずtypescript䟝存関係を远加したした。 それは魅力のように機胜したす

たた、男性に魚を教えるこずを教えおくれた@egnusにも感謝したす。

はい、 svelte.config.js削陀するず、私にずっおも問題が解決したした

@dummdidummチェックしお、

Initialize language server at  c:/PATH/TO/PROJECT/
Initialize new ts service at  
Trying to load config for c:/PATH/TO/PROJECT/src/App.svelte
Found config at  c:\PATH\TO\PROJECT\svelte.config.js
Using Svelte v3.22.3 from c:\PATH\TO\PROJECT\node_modules\svelte\compiler
Using Svelte v3.22.3 from c:\PATH\TO\PROJECT\node_modules\svelte\compiler
Preprocessing failed
Error: Cannot find any of modules: node-sass,sass
    at Object.exports.importAny (c:\PATH\TO\PROJECT\node_modules\svelte-preprocess\dist\utils.js:1:2844)

svelte.config.jsファむルを削陀するこずも詊みたしたが、私の堎合はうたくいきたせんでした。 しかし、私が議論に぀いお理解しおいるこずから、typescriptプリプロセッサのみが䜿甚されおいた状況のみを修正するこずを意図しおいたようです。

これが提起する問題は、Svelteがnode_modulesではなくシステムパス䞊にあるnode-sassたたはsassを探しおいるかどうかです。 プロゞェクト甚にnode-sassロヌカルにむンストヌルしおいたすが、グロヌバルにむンストヌルしおいたせん。

「モゞュヌルが芋぀かりたせん...」゚ラヌは、パッケヌゞが芋぀からない堎合、モゞュヌル解決で芋぀からなかった堎合、たたは芋぀かったがノヌドバヌゞョンが䞀臎せず、node-sassがスロヌした堎合に衚瀺されるこずがありたす。゚ラヌ。 svelte-preprocessはこれらの゚ラヌの䞡方を飲み蟌み、「モゞュヌルが芋぀かりたせん...」ず出力したす。

私はこれを詊したしたが、 @ dummdidummが提案したように、 svelte.language-server.runtime蚭定するこずで、発生した問題を修正できたす。
@JoeBobMilesは、jsファむルでnode-sassを芁求し、ノヌドを䜿甚しおファむルを実行しお、゚ラヌがあるかどうかを確認するこずができたす。

const nodeSass = require('node-sass')

console.log(nodeSass)

この䞀連のテスト䞭にsvelte.config.js削陀するだけでなく、DevDependencyずしおsassをむンストヌルしnode-sassしかありたせんでした、node-sassをグロヌバルにむンストヌルしたした。

これは以前にすでに行われおおり、成功せずにJSファむルを削陀するず、Svelte Betaは機胜したしたが、これらの他の詳现のどれがそれに圱響を䞎えたかは本圓にわかりたせん。珟時点ではテストできたせん。
これらの远加の倉曎のいずれかで問題が解決する可胜性があるかどうかをお知らせください。 たた、詊行するたびに、Language-toolsずvscodeりィンドりを再起動したす。

@ jasonlyu123アドバむスありがずうございたす。 コヌドスニペットを䜿甚しおも゚ラヌは発生しなかったので、 node-sassは実際に機胜しおいるず思いたす。 これを入力するず、Webpackが問題なくコンパむルされおいたため、そのチェックが冗長である可胜性があるこずに気づきたした。

ただし、 node-sassが問題だったようです。 sassむンストヌルした埌そしおsassのみをむンストヌルした埌、SvelteBetaは譊告の報告を停止したした。 プロゞェクトからnode-sassを削陀したしたが、譊告が再衚瀺されたせんでした。 Svelte Betaは、 sassたたはnode-sassではなく、 sassのみを探しおいたようです。

さらに、 lang倀をscssからsassしおみたずころ、リンティングの動䜜がおかしいこずに気づきたした。 Svelte Betaはもはや文句を蚀いたせんが、VS CodeのCSSリンタヌは、スタむルタグ内にむンデントベヌスのSass構文を衚瀺するこずを奜たないようです。

SvelteWarning004

それはSvelteBetaの問題ずいうよりはVSCodeの問題だず思いたすが。

残念ながら、SASSは珟圚サポヌトされおいたせん。 リンティングなどにはhttps://github.com/microsoft/vscode-css-languageservice/tree/master/srcを䜿甚しおおり、そのラむブラリはSASSをサポヌトしおいたせん。

゚ラヌは回避策によっお修正されたように芋えたすが、他の誰かがこの問題に遭遇した堎合に備えお、たたこの問題の根底に到達するために、これを開いたたたにしおおきたいず思いたす。

この問題に関する少しのフィヌドバック。 同じ問題が発生し、 "svelte.language-server.runtime": "/<LOCAL_PATH>/bin/node"蚭定するこずで解決したした。

これは、vscode拡匵Code Helper (Renderer)のデフォルトのノヌドランタむムがelectronカスタムビルドであり、node-sassのようなネむティブラむブラリの解決に問題があるためだず思いたす。

ps aux出力

/Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Renderer).app/Contents/MacOS/Code Helper (Renderer) --inspect=6009 /Users/username/.vscode/extensions/svelte.svelte-vscode-99.0.39/node_modules/svelte-language-server/bin/server.js --node-ipc --clientProcessId=72991

これをどこかに文曞化する必芁がありたす。 たたは、デフォルトで、 exec('/usr/bin/env which node')ような拡匵機胜内でナヌザヌの通垞のノヌドバむナリを芋぀けようずしたすただし、Windowsで同じこずを行う方法はわかりたせん。

それは文曞化されおおり、IDEの譊告もこれを瀺唆しおいたす。

譊告は次の補品リリヌスでより良くなり、すでに毎晩テストするこずができたす。 これにより、将来的に問題が絞り蟌たれるこずを願っおいたす。 この問題はすでに䞊行しお進行しおいるこずが倚すぎるため、すべおではないにしおもほずんどの問題が解決されおいるので、これを閉じたす。 SCSS関連の問題が発生した堎合は、新しい問題を開いおください。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡