node执行中,import引用json文件失败?

报错信息:

node:internal/errors:465
    ErrorCaptureStackTrace(err);
    ^
TypeError [ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "file:///D:/YiXun/code/ATestDemo/mml-demo/packages/plugins/xyplayer/package.json" needs an import assertion of type "json"

项目的package.json设置了

  "type": "module",

import貌似不能引入json文件。
image.png

阅读 11k
3 个回答

首先本来就是不能 import 一个 JSON 文件啊……

你可能是前端脚手架项目做的多了,以为啥都能 import 进来,但那其实是 Webpack/Rollup 等构建工具带来的额外能力。


ES 中倒是有一个新提案 Import Assertions,可以导入非 JS 模块了。但只是语法上个 Modules Import 类似(注意是类似,并不完全一样),实质上两者并不是同一个语法。怎么说呢,就像 ESM 的部分命名导入和对象解构赋值一样,看起来都用了花括号,实际上是完全不同的语法。

它需要你显式地声明类型,形如:

import data from './data.json' assert { type: 'json' };

// 也支持异步导入
import data = await import('./data.json', { assert: { type: 'json' } });

该特性于 Node.js v17.1.0+ 后支持。

注意,该提案目前尚未形成标准,只是 Chrome 率先引入了,所以基于 V8 的 Node.js 连带着可以用了而已。

var fs = require('fs')
var text = fs.readFileSync('./package.json', 'utf8')
var res = JSON.parse(text)
console.log(res)

json内容少的话可以新建一个js文件把它声明成一个对象就可以搞进来了

推荐问题
宣传栏