I want to import package.json into test.js, both files are in same directory.
I tried with require :
const jsonfile = require("./packages.json");
console.log({ jsonfile });
it throws error:
file:///home/.../test.js:1
const jsonfile = require("./packages.json");
^
ReferenceError: require is not defined
at file:///home/.../test.js:1:18
at ModuleJob.run (internal/modules/esm/module_job.js:145:37)
at async Loader.import (internal/modules/esm/loader.js:182:24)
at async Object.loadESM (internal/process/esm_loader.js:68:5)
This error implies, like it runs in browser, where is no require, I found an answer with similar message.
I tried with import:
import * as jsonfile from './packages.json';
console.log({ jsonfile });
internal/process/esm_loader.js:74
internalBinding('errors').triggerUncaughtException(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/home/.../packages.json' imported from /home/.../test.js
at finalizeResolution (internal/modules/esm/resolve.js:271:11)
at moduleResolve (internal/modules/esm/resolve.js:694:10)
at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:784:11)
at Loader.resolve (internal/modules/esm/loader.js:100:40)
at Loader.getModuleJob (internal/modules/esm/loader.js:246:28)
at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:47:40)
at link (internal/modules/esm/module_job.js:46:36) {
code: 'ERR_MODULE_NOT_FOUND'
}
What I have tried more?
"type":"module into package.json (but this is for Node >= 13, but without it I got warning (node:7170) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension. and then also error SyntaxError: Cannot use import statement outside a module)I found even suggestions to load JSON-file as regular text files and parse them into data structure, but this seems like the last resort...
It seems such a trivial task, but I have not found the idiomatic way how to import JSON-data into Javascript variable. What is wrong here? How should I import it?
I use Node 12.21.0
You're using Node.js in ESM mode, ESM does not currently import JSON modules by default. You can either:
require function in your ESM code and use that ORYou can do that by passing the --experimental-json-modules flag.
node --experimental-json-modules yourfile.js # can import JSON here
require function in your ESM codeYou can also always fall back on CommonJS modules and create a require of your own:
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
require('./package.json'); // now works
You can always just read JSON files with regular filesystem methods:
# const fs = require('fs');
import * as fs from 'fs';
const result = JSON.parse(fs.readFileSync('./package.json'));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With