今まで読んでいたJavaScriptのサンプルコードでは、外部モジュール(npmでインストールしたものなど)を使いたいときにはrequire()が使われていた。
なので、C言語で言うところのincludeみたいなものだろうと解釈していた。
require()ってどういうパスの解釈をするのだろう、と調べようとしたのだが、なんだかimportというものが出てきた。
時代の流れで変わってしまったとかだろうか?
一番わかりやすいのがここだった。
export / import と exports / require - Qiita
https://qiita.com/kumagaias/items/c8e87bbea496a5351234
なるほど、require()はNode.jsなのか。
だからそれしか見たことが無かったのかもしれない(ブラウザのことを考えていないので)。
Node.js v12.18.1で動かしてみる。
expo84.js
let Expo = 84; function ExpoFunc(val) { return val + 84; } export { Expo, ExpoFunc }
expo_use.js
import { Expo, ExpoFunc } from './expo84.js' console.log(Expo); console.log(ExpoFunc(10));
$ node expo_use.js
(node:24541) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
/home/ueno/Prog/expo_use.js:1
import { Expo, ExpoFunc } from './expo84.js'
^^^^^^SyntaxError: Cannot use import statement outside a module
...
モジュールとわからせないといけない?
あるいは拡張子が.mjsならよい?
expo84.mjs
let Expo = 84; function ExpoFunc(val) { return val + 84; } export { Expo, ExpoFunc }
expo_use.js
import { Expo, ExpoFunc } from './expo84.mjs' console.log(Expo); console.log(ExpoFunc(10));
あれ、これでもダメ??
expo84.mjs
let Expo = 84; function ExpoFunc(val) { return val + 84; } export { Expo, ExpoFunc }
expo_use.mjs
import { Expo, ExpoFunc } from './expo84.mjs' console.log(Expo); console.log(ExpoFunc(10));
$ node expo_use.mjs
(node:24577) ExperimentalWarning: The ESM module loader is experimental.
84
94
expo84.jsに戻すとそれはそれでエラーになったので、拡張子を変える場合は呼ばれる方も呼ぶ方も.mjsでないとダメとか?
require()を使うなら、こういう感じか。
expo84.js
let Expo = 84; function ExpoFunc(val) { return val + 84; } module.exports = { Expo, ExpoFunc }
expo_use.js
const myexpo = require('./expo84.js'); console.log(myexpo.Expo); console.log(myexpo.ExpoFunc(10));
$ node expo_use.js
84
94
うん、もうrequire()でいいや。。。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。