NodeJS 在 typescript 中使用fs

l0oc07j2  于 2023-01-08  发布在  Node.js
关注(0)|答案(4)|浏览(259)

我正在尝试使用fs.readFileSync读取一个文件,但似乎找不到它。
我确保声明了它,并将其添加到了构造函数中:

export default class Login extends React.Component<LoginProps, {}> {
    private webAuth: auth0.WebAuth;
    fs: any;

    constructor(props: any, context: any) {
        super(props, context);
        this.fs = require('fs');
        this.webAuth = new auth0.WebAuth({
            clientID: conf.auth0.clientId,
            domain: conf.auth0.domain,
            responseType: 'token id_token',
            redirectUri: `${window.location.origin}/login`
        });
    }
[...]

并将其用于一个简单的函数中:

verifyToken = (token) => {

    console.log(this.fs);
    let contents = this.fs.readFileSync('../utils/public.key', 'utf8');
    console.log(contents);

}

但这会引发一个Uncaught TypeError: _this.fs.readFileSync is not a function。有没有一种特殊的方法可以将fs包含在Typescript中?

piztneat

piztneat1#

我无法想象在React组件中使用fs的任何情况。即使您可以在服务器中使用React来呈现内容,但相同的代码应该在客户端中运行,您无法在客户端中访问fs
如果您想在服务器中使用fs,下面是一个示例:

import * as fs from 'fs';
import * as path from 'path';
fs.readFile(path.join(__dirname, '../../client/index.html'), 'utf8', (error, data) => {
        // ...
    })

package.json文件上,确保具有对node的依赖关系

"dependencies": {
 "@types/node": "^7.0.5"
}

这是我的tsconfig.json文件的样子:

{
    "compilerOptions": {
        "outDir": "./dist/",
        "sourceMap": true,
        "noImplicitAny": true,
        "module": "commonjs",
        "target": "es5",
        "jsx": "react",
        "allowJs": true,
        "typeRoots": [
            "./node_modules/@types"
        ]
    },
    "include": [
        "./db/**/*",
        "./src/**/*"
    ]
}
uqdfh47h

uqdfh47h2#

使用node -v 10.15.0和@类型/节点:
似乎宣言被改写了...
fs定义被声明为module,因此您应该执行以下操作:
import fs from "fs"; // Without star
编制日期:
var fs_1 = __importDefault(require("fs"));

const fs = require("fs");而不是require("fs").default;
使用星星,您将得到fs.default.TheFunctionYouWant而不是fs.TheFunctionYouWant
更好的方法是到console.log(fs);看看它是什么导入的。

{
  "compilerOptions": {
    "typeRoots": [],
    "types": [
      "node"
    ]
  }
}
ogq8wdun

ogq8wdun3#

最新植入,可以导入方法。

import { readFile, writeFile } from 'fs/promises';

直接使用...

// write
await writeFile('./file.json', content);

// read
const content = await readFile('./file.json');

参考https://nodejs.org/docs/latest-v14.x/api/

neekobn8

neekobn84#

安装@types/node可能也有帮助:npm i --save-dev @types/node

相关问题