javascript - ERR_IMPORT_ASSERTION_TYPE_MISSING pentru importul unui fișier json
Acest cod funcționa bine.
Nu știu dacă este pentru că am făcut upgrade la Node 17 sau ce, dar acum primesc
TypeError [ERR_IMPORT_ASSERTION_TYPE_MISSING]:
Module "file:///Users/xxxxx/code/projects/xxxxx/dist/server/data/countries.json"
needs an import assertion of type "json"
În fișierul meu api.ts am:
import countryTable from './data/countries.json';
Iată cum încep api.ts care este folosit de server.ts:
NODE_ENV=production node --optimize_for_size --trace-warnings --experimental-json-modules --no-warnings server/server.js
Răspuns #1
Actualizare: Conform propunerii, cuvântul cheie nou este with în loc de assert, dar assert ar trebui să rămână din motive de compatibilitate. Codul nou ar arăta astfel:
import countryTable from "./data/countries.json" with { type: "json" };
Va trebui să folosiți:
import countryTable from "./data/countries.json" assert { type: "json" };
https://github.com/tc39/proposal-import-assertions
Răspunsul #2
Pentru oricine are probleme de validare ESLint (din cauza faptului că assert nu este încă acceptat), puteți încerca să încărcați JSON-ul din sistemul de fișiere sincron:
const loadJSON = (path) => JSON.parse(fs.readFileSync(new URL(path, import.meta.url)));
const countries = loadJSON('./data/countries.json');
Referință: https://github.com/eslint/eslint/discussions/15305
Răspunsul #3
Pentru a importa .json în modulele ES poți folosi
module.createRequire()
https://nodejs.org/dist/latest-v18.x/docs/api/esm.html#no-require-exports-or-moduleexports
deoarece afirmațiile sunt încă experimentale în v18.12.1 de node.js
import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
const countryTable = require('./data/countries.json');
https://nodejs.org/dist/latest-v18.x/docs/api/module.html#modulecreaterequirefilename
