在node.js中有json的require吗

我想在我的JavaScript代码中包含几个JSON文件,这些文件与我的JavaScript源文件位于同一目录中。

如果我想包含另一个JavaScript文件,我可以简单地使用require。 现在我使用readFileSync__dirname来获取JSON,我认为这是一种丑陋的方式

是否有类似的require使我能够加载JSON文件?

357888 次浏览

不。使用readFilereadFileSync(仅在启动时使用后者)。

或者使用现有的库

或者把你的配置写在js文件中,而不是json文件

module.exports = {
// json
}

从节点v0.5开始。是的,你可以需要你的JSON,就像你需要一个js文件。

var someObject = require('./somefile.json')

在ES6:

import someObject from './somefile.json'

JSON文件不需要显式的exports语句。您不需要导出它来作为Javascript文件使用。

因此,对于有效的JSON文档,可以只使用require

data.json

{
"name": "Freddie Mercury"
}

main.js

var obj = require('data.json');


console.log(obj.name);
//Freddie Mercury
你甚至可以使用JSON的需要而不指定扩展名. json。 它将允许你将文件扩展名更改为. js,而不需要对导入进行任何更改

假设我们在同一个目录中有。/ myJsonFile.json

const data = require('./myJsonFile')

如果将来将。/ myJsonFile.json更改为。/ myJsonFile.js,则导入中不应更改任何内容。

其中最常见的两种

第一种方法:

let jsonData = require('./JsonFile.json')

let jsonData = require('./JsonFile') //如果省略.json也可以

import jsonData from ('./JsonFile.json')

第二种方式:

1)同步

const fs = require('fs')
let jsonData = JSON.parse(fs.readFileSync('JsonFile.json', 'utf-8'))

2)异步

const fs = require('fs')
let jsonData = {}
fs.readFile('JsonFile.json', 'utf-8', (err, data) => {
if (err) throw err


jsonData = JSON.parse(data)
})
< p >注意: 1)如果我们JsonFile。如果bb0 .json被修改了,我们不会得到新的数据,即使我们重新运行require('./JsonFile.json')

.json

2) fs。readFile或fs。readFileSync将总是重新读取文件,并获得更改

你可以使用node.js v14 experimental json modules标志来导入json文件。更多细节在这里

file.js

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


export default {
foo () {
console.log(data)
}
}

你用node --experimental-json-modules file.js来调用它

一个漂亮的非缓存异步一行,用于节点15模块:

import { readFile } from 'fs/promises';


const data = await readFile('\{\{ path }}').then(json => JSON.parse(json)).catch(() => null);

您可以使用模块来创建一个require。

import { createRequire } from 'module'
const require = createRequire(import.meta.url)
const foo = require('./foo.json')

如果你是使用打印稿,你可以只添加你的tsconfig.json一个名为resolveJsonModule:真的新字段,然后你可以像这样导入任何.json文件的所有信息:

import * as jsonfile from "./path/to/json"