ES ModulesでもCommonJS でもUMDでもない普通のJavaScriptをimportする方法を調べました。ブラウザで動作するスクリプトをテストしたいときにご活用ください
普通のJavaScript
script.js
class MyClass {
hello() {
return 'こんにちは'
}
}
普通のJavaScriptを変更することなくimportする
eval⭐⭐⭐⭐⭐
main.mjs
import { readFileSync } from 'node:fs'
eval(readFileSync('script.js') + ';global.MyClass=MyClass')
console.assert(new MyClass().hello() === 'こんにちは', 'あいさつすること')
普通のJavaScriptを変更しなくていいのでオススメ
import⭐⭐⭐
main.mjs
import { readFileSync } from 'node:fs'
const script = readFileSync('script.js') + ';export { MyClass }'
const { MyClass } = await import('data:text/javascript;base64,' + Buffer.from(script).toString('base64'))
console.assert(new MyClass().hello() === 'こんにちは', 'あいさつすること')
evalのときよりも複雑
普通のJavaScriptを変更してimportする
eval⭐⭐⭐⭐
script.js
class MyClass {
hello() {
return 'こんにちは'
}
}
globalThis.MyClass = MyClass
main.mjs
import './script.js'
console.assert(new MyClass().hello() === 'こんにちは', 'あいさつすること')
テストコードがシンプルになるのでオススメ
Node.js環境だけ晒すのもありよりのあり
script.js
class MyClass {
hello() {
return 'こんにちは'
}
}
if (typeof global === 'object') global.MyClass = MyClass
import⭐⭐
script.mjs
class MyClass {
hello() {
return 'こんにちは'
}
}
export { MyClass }
main.mjs
import { MyClass } from './script.mjs'
console.assert(new MyClass().hello() === 'こんにちは', 'あいさつすること')
script.js
をscript.mjs
に変えたり、scriptタグにtype=module
属性を付与する手間が増えるのでオススメできない