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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

529閲覧

エラーの見方がわかりません。

退会済みユーザー

退会済みユーザー

総合スコア0

Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/04/20 13:20

編集2021/04/20 13:36

リンク内容
上記サイトを参考に以下のスクリプトを書きました。

Java

1'use strict'; 2 3// Electronのモジュール 4const electron = require("electron"); 5 6// アプリケーションをコントロールするモジュール 7const app = electron.app; 8 9// ウィンドウを作成するモジュール 10const BrowserWindow = electron.BrowserWindow; 11 12const client = new (require('tplink-smarthome-api').Client)(); 13 14const plug = client.getPlug({ host: '192.168.10.3' }); 15 16// メインウィンドウはGCされないようにグローバル宣言 17let mainWindow; 18 19// 全てのウィンドウが閉じたら終了 20app.on('window-all-closed', function() { 21 if (process.platform != 'darwin') { 22 app.quit(); 23 } 24}); 25 26// Electronの初期化完了後に実行 27app.on('ready', function() { 28 // メイン画面の表示。ウィンドウの幅、高さを指定できる 29 mainWindow = new BrowserWindow({width: 800, height: 600}); 30 mainWindow.loadURL('file://' + __dirname + '/index.html'); 31 32 plug.setPowerState(true); 33 plug.setPowerState(false); 34 35 // ウィンドウが閉じられたらアプリも終了 36 mainWindow.on('closed', function() { 37 mainWindow = null; 38 }); 39}); 40 41実行すると以下のエラーが出ます。 42App threw an error during load 43C:\Projects\test\node_modules\tplink-smarthome-api\lib\bulb\index.js:188 44 async getSysInfo(sendOptions) { 45 ^^^^^^^^^^ 46ここ↑に何か問題がありそうということはわかるのですが、公開されているライブラリの中の話です。 47何を頼りに何をどう修正すれば良いのでしょうか? 48 49SyntaxError: Unexpected identifier 50 at Object.exports.runInThisContext (vm.js:76:16) 51 at Module._compile (module.js:528:28) 52 at Object.Module._extensions..js (module.js:565:10) 53 at Module.load (module.js:473:32) 54 at tryModuleLoad (module.js:432:12) 55 at Function.Module._load (module.js:424:3) 56 at Module.require (module.js:483:17) 57 at require (internal/module.js:20:19) 58 at Object.<anonymous> (C:\Projects\HotSpring\node_modules\tplink-smarthome-api\lib\index.js:7:14) 59 at Module._compile (module.js:556:32) 60

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

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

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

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

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

guest

回答1

0

ベストアンサー

その記述は非同期関数ですね。

基本的にはasync function getSysInfo () {}みたいな記載をするのですが、
クラス内のメソッドとして定義する場合はasync getSysInfo () {}といった風に記述することが可能です。

だから何なんやねんという話ですが、
非同期関数は元々JSにあった機能ではなく、
ES2017という比較的新しい仕様で追加された書き方なんです。
(ES2017はECMA ScriptというJSの仕様名の2017年度版という意味です)

MDNのサイトで確認した所、
Node.jsでは7.6.0で追加されたようです。
ですので、Node.jsのバージョンがそれより古ければ使えません。

ここは思い切ってNode.jsのバージョンを確認node -v
もしNode.jsのバージョンが古ければアップグレードしてみてください。

Node.jsはJSにC++のモジュールなんかを突っ込みまくって、
RubyやPythonのような汎用スクリプト言語と同じ事が出来るようにした魔改造JSですが、
JSは元々Webサイトの表示を整える為に利用されている言語です。

なので、昨日閲覧出来たWebページがChromeのアップデートで
JSエンジンが更新されてエラーで落ちるような事は許されないんです。
なので下位互換はかなりしっかりしており、常に最新に近いバージョンを使い続ける事が推奨されています。

投稿2021/04/20 14:19

miyabi-sun

総合スコア21194

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

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

退会済みユーザー

退会済みユーザー

2021/04/20 14:37

Node.js のバージョンは、node-v14.16.1-x64.msi が推奨だったので node-v14.16.1-x64.msi を今日インストールしたばかりです。 念のため アンインストールして node-v15.14.0-x64.msi をインストールしてみましたが、ダメでした。
miyabi-sun

2021/04/20 14:44

あー、流石にv14系なら動くはずですよね。 だったらElectronが悪いんでしょうね。 あいつは「ChroniumというブラウザにNode.jsをくっつけた」状態にしてデスクトップアプリにしたよ!と言い張る代物です。 この時にChroniumとセットで突っ込まれるNode.jsはWindows環境にインストールしたものではないはずです。 プロジェクトルートにpackage.jsonというライブラリのバージョンを管理するファイルがあるはずなので、それのdependenciesの箇所を見ながらElectronのバージョンが古くないか確認してみてください。 https://www.electronjs.org/
退会済みユーザー

退会済みユーザー

2021/04/20 14:51

Electron も今日公式サイトからインストールしたばかりなので最新版だと思います。そういう代物なら使わなくていいです。 一人の人が使う業務用のアプリなので、真っ黒の画面で結構です。 その場合の基本的な枠組みを作る参考サイトとかありますか?
miyabi-sun

2021/04/20 15:12

でしたらこのサイトとかいかが? https://jsprimer.net/use-case/nodecli/ Node.jsで最も早く作りたいなら こういうターミナル上で動作させるCLIアプリケーションが最強です。 兎に角画面上に出力したければ`console.log(値)`を実行するだけです。 質問文のコードも8割がElectronを制御する構文なので、 使いたい部分だけの記述になるので開発が超絶楽になると思います。
退会済みユーザー

退会済みユーザー

2021/04/20 16:13

コンソールアプリケーションにしたら簡単に出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問