Jsonをインポートする単純なファイルがあります。
main.ts
import json from './file.json'
ただし、jsonファイルをインポートすると、denoは次のエラーをスローします。
$ deno run main.ts
Compile file:///home/path/to/project/main.ts
error: Uncaught TypeError: Cannot resolve extension for "file:///home/path/file.json" with mediaType "Json".
at getExtension ($deno$/compiler.ts:218:13)
at new SourceFile ($deno$/compiler.ts:263:22)
at Function.addToCache ($deno$/compiler.ts:339:16)
at processImports ($deno$/compiler.ts:743:31)
at async processImports ($deno$/compiler.ts:753:7)
at async compile ($deno$/compiler.ts:1316:31)
at async tsCompilerOnMessage ($deno$/compiler.ts:1548:22)
at async workerMessageRecvCallback ($deno$/runtime_worker.ts:74:9)
ファイルパスは正しく、ファイルは有効なJSONです。 TypeScriptコンパイラはデフォルトでこれを許可する必要があります 。
また、resolveJsonModule
を明示的に有効にしようとしました:
tsconfig.json
{
"compilerOptions": {
"resolveJsonModule": true
},
"include": [
"**/*"
]
}
そしてそれを設定で実行しますが、それでも同じエラーが発生します:
$ deno run main.ts --config=tsconfig.json
Compile file:///home/path/to/project/main.ts
error: Uncaught TypeError: Cannot resolve extension for "file:///home/path/file.json" with mediaType "Json".
at getExtension ($deno$/compiler.ts:218:13)
at new SourceFile ($deno$/compiler.ts:263:22)
at Function.addToCache ($deno$/compiler.ts:339:16)
at processImports ($deno$/compiler.ts:743:31)
at async processImports ($deno$/compiler.ts:753:7)
at async compile ($deno$/compiler.ts:1316:31)
at async tsCompilerOnMessage ($deno$/compiler.ts:1548:22)
at async workerMessageRecvCallback ($deno$/runtime_worker.ts:74:9)
ここで何が問題になっていますか?
次のように、jsonファイルを読み取るためのスレッドサポートは、deno 1.0を出荷する直前に削除されました
https://github.com/denoland/deno/issues/56
ただし、jsonファイルの読み取りには次の構文を使用できます。
Deno.readTextFile('./file.json').then(data => {
console.log(JSON.parse(data))
})
または
const data = JSON.parse(Deno.readTextFileSync('./file.json'));
また、上記のコードを含むファイルは必ず--allow-read
国旗。それ以外の場合は、権限拒否エラーが発生します
deno run --allow-read index.ts
Afeefの回答の代わりに、JSON
ファイルは有効なオブジェクトリテラルであるため、export default
を追加して拡張子を.js
に変更できます。
from settings.json
{
"something": {
"foo": "bar"
}
}
へsettings.js
export default {
"something": {
"foo": "bar"
}
}
そして今、あなたはimport
を使うことができます
import settings from './settings.js'
console.log(typeof settings) // object
constole.log(settings.something.foo) // bar
短所は別として、--allow-read
アクセスが必要ないという利点があります。