我想将package.json
导入test.js
,这两个文件都在同一个目录中。
我试过用require
:
const jsonfile = require("./packages.json");
console.log({ jsonfile });
它抛出错误:
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)
这个错误意味着,就像它在浏览器中运行一样,在没有require
的地方,我发现了具有类似消息的an answer。
我和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'
}
我又试了些什么?
filename
"type":"module
13 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变量的惯用方法。这里怎么了?我该怎么进口呢?
我使用Node 12.21.0
发布于 2021-03-20 20:59:59
在ESM模式下使用Node.js,默认情况下ESM目前不导入JSON模块。你可以:
require
函数,并手动使用或打开JSON模块导入(通过传递CLI标志)
您可以通过传递--experimental-json-modules
标志来做到这一点。
node --experimental-json-modules yourfile.js # can import JSON here
在您的ESM代码中创建require
函数
您还可以始终回到CommonJS模块并创建自己的require
:
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
require('./package.json'); // now works
手动JSON.parse文件
您可以始终使用常规的文件系统方法读取JSON文件:
# const fs = require('fs');
import * as fs from 'fs';
const result = JSON.parse(fs.readFileSync('./package.json'));
发布于 2021-07-20 22:14:24
您希望导入package.json
,但是在代码中您尝试导入packages.json
(有一个错误)。
注意,当您使用ESM (import ... from ...
语法)时,您不能直接导入.json文件,并且不需要定义.json文件(在nodejs上),而在CJS中,您可以使用require(...)
语法加载json文件(参见https://nodejs.org/api/esm.html#esm_no_json_module_loading)。
另外,请注意,您可以创建一个导入JSON文件并导出其内容的CJS文件,以便以后可以从ESM文件导入它。
pkg.cjs (中国)
const pkg = require('./package.json');
module.exports = pkg;
index.mjs (ESM)
import pkg from './pkg.cjs';
console.info(`Starting ${pkg.name} v${pkg.version}`);
发布于 2021-03-20 21:00:53
导入语法应该总是有效的,但在这种情况下,您的回报是错误的。尝试从‘./pacages.json’导入jsonfile;在这种情况下你不需要*
https://stackoverflow.com/questions/66726365
复制相似问题