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

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

新規登録して質問してみよう
ただいま回答率
85.31%
Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

1回答

1831閲覧

NodejsでVScode拡張機能を作成中,Cannot find module 'vscode'のエラーが出る

monnmomo

総合スコア3

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2022/10/24 08:01

前提

NodejsTypeScriptでVScodeの拡張機能を作っています。SQlite3の接続や,特定の条件時にpythonファイルの実行を行う機能を作成していました.

発生している問題・エラーメッセージ

VScodeの拡張機能を作成中に,ある時突然このエラーが出るようになりました.

エラー出現前から元々なぜか,実行時,プロジェクトフォルダ内のpythonファイルやSQlite3を読み込んでくれずに,全く別の場所を探しに行ってしまう問題が起こっていました.(前の未解決質問で詳しく書いています)
そのため,pythonファイルやSQlite3を,nodejs実行時に探しに行っているらしい「C:\Users\stude\AppData\Local\Programs\Microsoft VS Code」に置いて,開発を行っていました.

しかしこの場所に置いたpythonファイルがいつの間にか消えていたり,ついには以下のエラーが出て全く動かなくなりました.

C:\Program Files\nodejs\node.exe .\assistsystem\out\extension.js Uncaught Error Error: Cannot find module 'vscode' Require stack: - c:\Users\stude\Desktop\system_folder\vs_system\assistsystem\out\extension.js at Module._resolveFilename (internal/modules/cjs/loader:956:15) at Module._load (internal/modules/cjs/loader:804:27) at Module.require (internal/modules/cjs/loader:1028:19) at require (internal/modules/cjs/helpers:102:18) at <anonymous> (c:\Users\stude\system_folder\vs_system\assistsystem\src\extension.ts:1:1) at Module._compile (internal/modules/cjs/loader:1126:14) at Module._extensions..js (internal/modules/cjs/loader:1180:10) at Module.load (internal/modules/cjs/loader:1004:32) at Module._load (internal/modules/cjs/loader:839:12) at executeUserEntryPoint (internal/modules/run_main:81:12) at <anonymous> (internal/main/run_main_module:17:47) Process exited with code 1

該当のソースコード

typescript

1import * as vscode from 'vscode'; 2

試したこと

以下コマンドを打ったところnode_moduleフォルダ内にvscodeとtest-vscodeが追加されましたが,実行時エラーに変化はありませんでした.

npm install -D vscode

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

エラー出現前から元々なぜか,実行時,プロジェクトフォルダ内のpythonファイルやSQlite3を読み込んでくれずに,全く別の場所を探しに行ってしまう問題が起こっていました.

確認しました。
こういう使い方はよくありません。
これは「カレントディレクトリ」が主軸になるからです。

js

1const db = new sqlite3.Database("../try.sqlite3");

VSCodeのプラグインにしたいとかなら
https://maku.blog/p/tfq2cnw/
settings.jsonにあやかって$HOME/.config/Code/ライブラリ名/try.sqlite3みたいな箇所決め打ちでファイル作るものじゃないですかね?

ソースコードのファイルを基点にするならグローバル変数の__dirnameを使うのが一般的です。
ES Modules版は__dirnameがないので、TSだとどうするのかは知りません。
一応__dirnameの代替の記事貼っておきます。
https://teno-hira.com/media/?p=1615

npm install -D vscode

この-Dオプションは、そのライブラリを作っている人間がローカルで導入する専用モードみたいなものなので
チーム内で配布するとか、オープンソース的に配布するようなものに対して使ってはいけません。

VS Codeというエディタに組み込んで利用する目的は、
仮に開発者のあなたしか使わないプラグインだったとしても、
-Dオプションで導入するものは「メモリの使用量を確認する」「テスト駆動開発」する、みたいな開発・デバッグ時のみ利用するものだけを導入しましょう。

ついには以下のエラーが出て全く動かなくなりました.

知らんがなって感じですが、
プラグインとして導入したら、JSファイルが吸われて特定のディレクトリに運ばれてしまうんじゃないんですかね?

Node.jsは実行時、ファイルのあるディレクトリから遡るようにnode_modulesディレクトリを探していくものなので
このJSファイルの実体が何処にあるのかを確認してみると解決するかと思います。
__dirnameglobal.module.pathsなんかをconsole.log等で出力して確認してみては?

勝手にJSファイルだけが複製されてimpoortが一切使えないとか、プラグインとしてどうよって話になるので
Node.jsで作ったライブラリをVS Codeプラグインにする場合のベストプラクティスとかあるかと思いますが、
そのへんの路線でぐぐってみるのが良いと思います。

投稿2022/10/24 10:42

miyabi-sun

総合スコア21403

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

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

monnmomo

2022/10/26 07:38

丁寧なご回答ありがとうございます.注意点も教えていただけて助かります. プロジェクトを作り直してみたところ,全然違うところにpythonやSQliteを探しに行ってしまう問題は解決しました.詳しくは分からないですが,プロジェクトフォルダの上の階層にいる状態で色々コマンドを打ってしまっていたことが一因だったのかもしれないです.教えていただいた__dirnameやglobal.modue.paths等も確認して,それらの値は問題ないようでした. ただ,やはりCannot find module 'vscode'のエラーは消えませんでした.作り直して,node extension.tsで実行したところ,このエラーは最初から出ているようでした.(F5で実行するとエラーがでない時があり,気づきませんでした) importが使えてない気もするし,vscodeのモジュール(node_modules/@types/vscode/index.d.tsにあるようです)を探しにいけていないのかはわからないです. それに関しては,整理したのち,また質問をあげようと思います. たどたどしい質問だったにも関わらず,丁寧に教えてくださってありがとうございました.勉強になりました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問