J'ai un fichier simple qui importe un json:
main.ts
import json from './file.json'
Cependant, deno renvoie l'erreur suivante lors de l'importation d'un fichier json:
$ 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)
Le chemin du fichier est correct et le fichier est un JSON valide. Le le compilateur TypeScript devrait permettre cela par défaut .
J'ai également essayé d'activer explicitement resolveJsonModule
:
tsconfig.json
{
"compilerOptions": {
"resolveJsonModule": true
},
"include": [
"**/*"
]
}
et exécutez-le avec la configuration mais obtenez toujours la même erreur:
$ 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)
Quel est le problème ici?
Selon le thread suivant, la prise en charge de la lecture des fichiers json a été supprimée juste avant l'envoi de deno 1.0
https://github.com/denoland/deno/issues/56
Cependant, vous pouvez utiliser la syntaxe suivante pour lire un fichier json
Deno.readTextFile('./file.json').then(data => {
console.log(JSON.parse(data))
})
ou
const data = JSON.parse(Deno.readTextFileSync('./file.json'));
Veillez également à exécuter le fichier contenant le code ci-dessus avec --allow-read
drapeau. Sinon, vous obtiendrez une erreur d'autorisation refusée
deno run --allow-read index.ts
Comme alternative à la réponse d'Afeef, puisqu'un fichier JSON
est un littéral d'objet valide, vous pouvez ajouter export default
et remplacez l'extension par .js
.
de settings.json
{
"something": {
"foo": "bar"
}
}
à settings.js
export default {
"something": {
"foo": "bar"
}
}
Et maintenant, vous pouvez utiliser import
import settings from './settings.js'
console.log(typeof settings) // object
constole.log(settings.something.foo) // bar
L'avantage, en plus d'être plus court, c'est que vous n'avez pas besoin de --allow-read
accès