我应该如何从node.js中的typescript读取和写入文本文件? 我不确定会在node.js中读取/写入一个沙箱文件,如果没有,我相信应该有一种方法来访问文件系统。
答案 0 :(得分:22)
相信应该有一种方法来访问文件系统。
使用node.d.ts
加入npm i @types/node
。然后创建一个新的tsconfig.json
文件(npx tsc --init
)并创建一个.ts
文件,如下所示:
import fs from 'fs';
fs.readFileSync('foo.txt','utf8');
您也可以使用fs
中的其他功能:https://nodejs.org/api/fs.html
节点快速入门:https://basarat.gitbooks.io/typescript/content/docs/node/nodejs.html
答案 1 :(得分:5)
首先,您需要为Typescript安装节点定义。您可以在此处找到定义文件:
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/node/node.d.ts
获得文件后,只需添加对bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
bash: line 1: bundle: command not found
bash: line 1: bundle: command not found
bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3 returned exit code 127
Action failed: bundle install
文件的引用,如下所示:
.ts
然后,您可以使用节点文件系统模块对读取/写入的typescript类进行编码。您的打字稿类/// <reference path="path/to/node.d.ts" />
可能如下所示:
myClass.ts
一旦您将/// <reference path="path/to/node.d.ts" />
class MyClass {
// Here we import the File System module of node
private fs = require('fs');
constructor() { }
createFile() {
this.fs.writeFile('file.txt', 'I am cool!', function(err) {
if (err) {
return console.error(err);
}
console.log("File created!");
});
}
showFile() {
this.fs.readFile('file.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("Asynchronous read: " + data.toString());
});
}
}
// Usage
// var obj = new MyClass();
// obj.createFile();
// obj.showFile();
文件转换为javascript(check out here,如果您不知道如何操作),您可以使用节点运行您的javascript文件并让魔法工作:
.ts
答案 2 :(得分:3)
import { readFileSync } from 'fs';
const file = readFileSync('./filename.txt', 'utf-8');
这对我有用。
您可能需要将第二个命令包装在任何函数中,或者可能需要在没有关键字const
的类中进行声明。
答案 3 :(得分:1)
import * as fs from 'fs';
import * as path from 'path';
fs.readFile(path.join(__dirname, "filename.txt"), (err, data) => {
if (err) throw err;
console.log(data);
})
编辑:
考虑项目结构:
../readfile/
├── filename.txt
└── src
├── index.js
└── index.ts
考虑index.ts
:
import * as fs from 'fs';
import * as path from 'path';
function lookFilesInDirectory(path_directory) {
fs.stat(path_directory, (err, stat) => {
if (!err) {
if (stat.isDirectory()) {
console.log(path_directory)
fs.readdirSync(path_directory).forEach(file => {
console.log(`\t${file}`);
});
console.log();
}
}
});
}
let path_view = './';
lookFilesInDirectory(path_view);
lookFilesInDirectory(path.join(__dirname, path_view));
如果您位于readfile文件夹中并运行tsc src/index.ts && node src/index.js
,则输出为:
./
filename.txt
src
/home/andrei/scripts/readfile/src/
index.js
index.ts
也就是说,这取决于您在哪里运行节点。
__dirname是当前模块的目录名称。
答案 4 :(得分:0)
澄清一下:如果出现 TS 2307:找不到模块导入错误:检查 tsconfig.json 文件。
它必须包含 node_modules
{
.....
"include": [
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.vue",
"tests/**/*.ts",
"tests/**/*.tsx",
"node_modules"
],
.....
}