使用 es6 在 NodeJs 中导入 JSON 文件

Posted

技术标签:

【中文标题】使用 es6 在 NodeJs 中导入 JSON 文件【英文标题】:Import JSON file in NodeJs using es6 【发布时间】:2020-04-12 02:59:35 【问题描述】:

您好,我目前正在学习 nodejs,我尝试导入这样的 json 文件:

'use strict'

import data from 'users.json'

console.log(data)

每次我得到这个错误“找不到包'users.json'”

但是如果我用 fs 读取文件,它可以工作,那么你能解释一下我该怎么做吗

【问题讨论】:

import data from ('./users.json')var data = require('./users.json') 这能回答你的问题吗? is there a require for json in node.js 如果我从 ('./users.json') 导入数据,我会得到“未知文件扩展名”,但如果我执行要求,我会得到“未定义要求” 【参考方案1】:

试试:

import data from './users'

这是es6做事的方法,或者如果你想要更旧的语法方法,你可以尝试

const data = require('./users')

好的,所以解释就是这样,这些句号和正斜杠用于指示调用导入的文件的相对路径,这意味着您会看到类似 ../file/help 的内容。 ./ 表示上一级目录 ../ 表示上一级目录,以此类推。斜杠后面的名字只是告诉你的程序要进入哪个文件夹来查找要从中导入的文件,所以./folder意味着上一个目录并进入文件夹目录等等。

几乎忘了提及,除非绝对必要,否则不应从 json 文件或文本文件或任何其他没有 .js 扩展名(实际上不必指定)的文件导入。要处理节点中的文件,您必须使用 fs 库。

const fs =require('fs')

....

fs.readFile('./users.json','utf-8',(err,jsonString)=>
        const data = JSON.parse(jsonString);
         //whatever other code you may fanacy
         

查看fs 模块,了解可用于播放文件的强大功能列表

【讨论】:

如果我喜欢你的建议,我会得到“未知文件扩展名:C:\users\isaib\js\app\users.json” 抱歉,我已经用更好的解释更新了我的答案 我相信你可以像这样导入 JSON 文件:const data = require('./temp.json');。它对我有用。 尽管使用 fs 模块可能仍然是更好的做法,并且将来会为自己省去很多麻烦 如果您需要为 Web 应用程序或类似的东西加载一个小配置文件,我认为导入 JSON 很好。【参考方案2】:

虽然选择的答案是正确的,但这里有一个解释,我希望可以增加一些清晰度:

import MyModule from 'some-module'

是 ES6 导入语法,与使用 require 的旧 CommonJS 语法相反。

CommonJS的require一般可以用来导入文件; ES6 的import 语句更具体,一般用于导入符合模块条件的js 文件(有export 语句),或者CSS 表格等特定资产。与require 不同,它通常不适用于读取非模块文件。

你不能在同一个文件中混合 CommonJS require 和 ES6 import(至少不容易),所以如果你正在使用 ES6 import 并希望读取文件,请使用 @987654330 @ 或类似的方法。如果文件是json 字符串,则需要使用JSON.parse() 对其进行解析。

【讨论】:

以上是关于使用 es6 在 NodeJs 中导入 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章

在 ES6 Node.js 中导入“.json”扩展会引发错误

如何使用 npm 在 ES6 中导入 moment.js?

如何在 ES6 项目中导入我的 npm 模块?

在 ES 模块(Node.js)中导入 JSON 文件

如何在 ECMAScript 6 中导入 JSON 文件?

如何在 vanilla Javascript 文件中导入 nodejs 模块