使用Node.js我得到readFileSync不是一个函数

时间:2016-06-17 12:36:14

标签: angularjs node.js typescript

我正在使用Angular 2,typescript,nodejs和Visual Studio开发一个Web应用程序。我想阅读位于我的wwwroot文件夹中的文件。到目前为止,我创建了以下类:

///<reference path="../../node_modules/angular2/ts/typings/node/node.d.ts"/>
export class LoadConfigurationService {
    fs: any;
    constructor() {
        this.fs = require('fs');
        let data = this.fs.readFileSync('input.txt');
    }
}

问题是我总是收到错误"readFileSync is not a function"。我试图通过添加以下行来安装节点文件系统模块

"file-system": "^2.2.1"

到我的package.json依赖项。我还添加了

"node.TypeScript.DefinitelyTyped": "2.8.8"

到我的project.json依赖项。但它一直给我同样的错误。我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的代码适用于我,例如它。你遇到了什么错误?这是(稍作修改)ts:

declare var require: any;

export class LoadConfigurationService {
  fs: any;
  public data: string;
  constructor() {
    this.fs = require('fs');
    this.data = this.fs.readFileSync('input.txt').toString();
  }
}

const obj = new LoadConfigurationService();
console.log(obj.data);

通过tsc v1.8.7生成:

"use strict";
var LoadConfigurationService = (function () {
    function LoadConfigurationService() {
        this.fs = require('fs');
        this.data = this.fs.readFileSync('input.txt').toString();
    }
    return LoadConfigurationService;
}());
exports.LoadConfigurationService = LoadConfigurationService;
var obj = new LoadConfigurationService();
console.log(obj.data);

在本地目录中使用适当的input.txt(由“文件内容”组成)运行此命令并获取:

$ node temp.js
File Contents

可能存在的问题

我可以看到一些可能妨碍您的问题。

代码取决于本机节点fs,而不是"file-system": "^2.2.1"

除了referenced npmjs library之外,您正在调用本机fs库。

在构造函数中不需要依赖项。

对象的依赖性是一个问题,值得一读,但这不是处理它的好方法。 fs应该是不可变的,因此每次构造对象时都不需要它。文件顶部只有一行可以:

const fs = require('fs');
Angular中的

fs

我不确定片段与Angular有什么关系,但是如果这个代码得到webpacked或浏览器化,那么事情将变得困难。 fs用于文件系统访问,并且捆绑到浏览器中将无法很好地结束。