我正在使用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依赖项。但它一直给我同样的错误。我做错了什么?
答案 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
用于文件系统访问,并且捆绑到浏览器中将无法很好地结束。