如何阅读节点中的本地Markdown文件?
我正在使用名为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') );
库的演示只讨论创buildMarkdownstring作为variables,而不是本地文件。 我明白的做法是在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'
使用import {readFile } from 'fs'
并且在使用fs.stat或fs.open时也会发生同样的错误。 FS不是节点的默认库吗? 它应该包含在package.json中的webpack? 即使我运行npm install --save fs
我仍然无法访问这些函数。 (PS我正在使用create-react-app)
而且,如果我不能用fs
做这个,还有另一种方法吗?
fs
模块没有默认导出,因此使用默认导入语法导入它将不起作用。 fs
模块只导出已命名的导出文件,所以将它们全部导入到名称fs
下,如下所示:
import * as fs from 'fs'
这将导入所有命名的导出作为名为fs
的一个对象的属性。 这将允许你做fs.readFile
。 更好的是,您可以使用命名导出导入来导入您所需的function:
import { readFile } from 'fs'
其次,将readFile
传递给Markdown文件的path ,不要直接用import语法导入:
fs.readFile('./content/generic.md', 'utf8', (err, data) => { ... });
除非您有正确的加载程序来导入文件,否则不要导入它与require
或import
。 Node会将其视为JavaScript文件,并尝试将Markdown解释为JavaScript。 将Markdown文件的path直接传递给readFile
。 还要确保将编码指定为utf8
以获取文件的string内容。