Node.jsを使用してアプリを作成しています。具体的には、Node v10.3.0を使用しています。このアプリは./my-module-console/index.js
にあるディレクトリにあります。このアプリには./my-module-console/package.json
にあるpackage.jsonファイルがあります。このアプリは./my-module/items/
で定義されたクラスを参照します。my-module
は独自のパッケージを表すことに注意してください。このパッケージは./my-module/package.json
で定義されています。index.jsのコードは次のようになります:
'use strict';
import { Item } from '../my-module/items/item.js';
async function entry() {
let item = await Item.FindById(1);
console.log(item);
}
entry();
これを実行しようとすると、次のエラーが発生します。
import { Item } from '../my-module/items/item.js';
^
SyntaxError: Unexpected token {
インポートステートメントの何が問題になっていますか?それは私には正しいようです。私は何かを誤解していますか?
item.js
class Item {
constructor() {}
async static FindById(id) {
console.log('finding item by id: ' + id);
}
};
module.exports = Item;
ありがとう!
@jsur ESモジュールで述べたように、モジュールはまだ実験段階です。ただし、それらを使用する場合は、--experimental-modules
を追加する必要があります。それでもESモジュールを使用したい場合は、rename .js to .mjsとitem.jsを使用する必要があります。これはcommonJSスタイルですが、ESモジュールに変更する必要があります+その他の小さな修正。また、「use strict」を実際に使用する必要はありません。デフォルトでは厳密です。最終的には次のようになります。
index.mjs
import { Item } from '../my-module/items/item';
async function entry() {
let item = await Item.FindById(1);
console.log(item);
}
entry();
item.mjs
export class Item {
constructor() {}
static async FindById(id) {
console.log('finding item by id: ' + id);
}
}
さあ、node --experimental-modules index.mjs
を実行してください。
_import { Item } from '../my-module/items/item.js';
_は、JavaScriptモジュールからエクスポートをインポートするためのES6構文です。 Nodeは現在、追加のフラグなしではこれをサポートしていないため、代わりにrequire
を使用する必要があります:
const item = require('../my-module/items/item');
この方法では、クラスItem
を_item.js
_にエクスポートする必要があります。
また、_index.js
_で関数を使用するには、エクスポートするクラスのインスタンスを作成する必要があることにも注意してください。
インポートは現在実験段階です。ドキュメントごと
--experimental-modulesフラグを使用して、ESMモジュールをロードする機能を有効にすることができます。
これを設定すると、.mjsで終わるファイルをESモジュールとしてロードできるようになります。
node --experimental-modules my-app.mjs
babelコンパイラを使用してES6コードをコンパイルして実行しない限り、Import
はまだサポートされていません。
experimental-modulesを使用するのは、実験、つまり開発環境用です。 .mjsに名前を変更することは、最終的には変更されるため、良い考えではありません。
Babel jsを使用する場合:ES6でコードを記述し、コンパイルして実行します。
オプションで、
問題をすばやく解決して先に進む方法は次のとおりです。
const item = require('../my-module/items/item');
最初:
class Item {
constructor() {}
async static FindById(id) {
console.log('finding item by id: ' + id);
}
};
module.exports.Item = Item; // change this line
2番目:
'use strict';
// import { Item } from '../my-module/items/item.js'; // not sure if it work, it work in react, but in regular node.js can be wrong (look doc ES6)
const Item = require('../my-module/items/item.js');
var someitem = new Item();
async function entry() {
let item = await someitem.FindById(1);
console.log(item);
}
entry();