w.k*_*w.k 7 javascript json node.js
我想导入package.json
到test.js
,两个文件都在同一目录中。
我尝试过require
:
const jsonfile = require("./packages.json");
console.log({ jsonfile });
Run Code Online (Sandbox Code Playgroud)
它抛出错误:
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)
Run Code Online (Sandbox Code Playgroud)
这个错误意味着,就像它在浏览器中运行一样,其中 no require
,我找到了带有类似消息的答案。
我尝试过import
:
import * as jsonfile from './packages.json';
console.log({ jsonfile });
Run Code Online (Sandbox Code Playgroud)
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'
}
Run Code Online (Sandbox Code Playgroud)
我还尝试过什么?
"type":"module
到package.json
(但这适用于 Node >= 13,但如果没有它,我会收到警告(node:7170) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
,然后还会出现错误SyntaxError: Cannot use import statement outside a module
)我什至发现了将 JSON 文件加载为常规文本文件并将其解析为数据结构的建议,但这似乎是最后的手段......
这似乎是一个微不足道的任务,但我还没有找到如何将 JSON 数据导入 Javascript 变量的惯用方法。这里有什么问题吗?我应该如何导入它?
我使用节点12.21.0
Ben*_*aum 19
您在 ESM 模式下使用 Node.js,默认情况下 ESM 当前不导入 JSON 模块。您可以:
require
函数并使用该函数 OR您可以通过传递--experimental-json-modules
标志来做到这一点。
node --experimental-json-modules yourfile.js # can import JSON here
Run Code Online (Sandbox Code Playgroud)
require
在 ESM 代码中创建一个函数您还可以随时依靠 CommonJS 模块并创建require
您自己的模块:
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
require('./package.json'); // now works
Run Code Online (Sandbox Code Playgroud)
您始终可以使用常规文件系统方法读取 JSON 文件:
# const fs = require('fs');
import * as fs from 'fs';
const result = JSON.parse(fs.readFileSync('./package.json'));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14744 次 |
最近记录: |