我正在使用名为react-markdown
的库。如果您了解React,那么它的实现非常简单。
import React from 'react';
import ReactDOM from 'react-dom';
import ReactMarkdown from 'react-markdown';
var content = '# This is a header\n\nAnd this is a paragraph';
ReactDOM.render(
<ReactMarkdown source={content} />,
document.getElementById('root')
);
该库的演示仅讨论将Markdown字符串创建为变量,而不是本地文件。我要做的就是在Node中使用fs
。所以我写了以下内容:
import React from 'react';
import ReactDOM from 'react-dom';
import ReactMarkdown from 'react-markdown';
import * as fs from 'fs';
import content from './content/generic.md';
fs.readFile(content, (err, data) => {
if (err) throw err;
console.log(data);
});
在我向ReactMarkdown
元素提供内容之前,Webpack抱怨readFile
不是函数!
具体来说,它会突出显示fs.readFile
行并说:
TypeError: __WEBPACK_IMPORTED_MODULE_5_fs___default.a.readFile is not a function
如果我使用import {readFile } from 'fs'
会发生同样的错误,当我使用fs.stat或fs.open时也会发生这种错误。不是节点的默认库吗?它应该包含在package.json中用于webpack吗?即使我运行npm install --save fs
,我仍然无法访问这些功能。 (P.S.我正在使用create-react-app)
此外,如果我无法使用fs
执行此操作,是否还有其他方法?
答案 0 :(得分:3)
fs
模块没有默认导出,因此使用默认导入语法导入它不会起作用。 fs
模块仅导出命名导出,因此以fs
的名称导入所有这些导出,如下所示:
import * as fs from 'fs'
这将导入所有命名导出作为名为fs
的一个对象的属性。这样你就可以fs.readFile
。更好的是,您可以使用命名导出导入来导入只需您需要的功能:
import { readFile } from 'fs'
其次,将readFile
路径传递给Markdown文件,不要使用导入语法直接导入它:
fs.readFile('./content/generic.md', 'utf8', (err, data) => {
...
});
除非您使用正确的加载程序导入文件,否则请勿使用require
或import
导入该文件。 Node会将其视为JavaScript文件,并尝试将Markdown解释为JavaScript。将Markdown文件的路径直接传递给readFile
。另外,请确保将编码指定为utf8
以获取文件的字符串内容。