文字列としてファイルが必要


99

私はnode + expressを使用していますが、ファイルを文字列としてインポートする方法を知りたいだけです。私が望むのは、それを変数にロードすることだけが必要なtxtファイルがあるとします。

var string = require("words.txt");

私は反対です

modules.exports = function(){

    var string = "whatever";

    return string;

}

1
答えではありませんが、これは関数の作成を回避します:const { string } = require('words.js');where words.jscontainsmodule.exports = { string: 'whatever' };
Dem Pilafian

回答:


127

(いくつかの)特定の拡張機能の場合は、独自のrequire.extensionsハンドラーを追加できます。

var fs = require('fs');

require.extensions['.txt'] = function (module, filename) {
    module.exports = fs.readFileSync(filename, 'utf8');
};

var words = require("./words.txt");

console.log(typeof words); // string

そうしないと、あなたは混在させることができfs.readFilerequire.resolve

var fs = require('fs');

function readModuleFile(path, callback) {
    try {
        var filename = require.resolve(path);
        fs.readFile(filename, 'utf8', callback);
    } catch (e) {
        callback(e);
    }
}

readModuleFile('./words.txt', function (err, words) {
    console.log(words);
});

51
require.extensionsは、この投稿に出くわしたすべてのユーザーに対して非推奨になりました。nodejs.org/api/globals.html#globals_require_extensions
blockloop

2
Deprecated in the pastしかしSince the module system is locked, this feature will probably never go away. However, it may have subtle bugs and complexities that are best left untouched.
loretoparisi

10
確かに非推奨ですが、良い代替手段はありますか?(つまり、requireを意味します)
juandemarco 2017

31

CSSファイルをStringに読み取るには、次のコードを使用します。それは動作し.txtます。

const fs = require('fs')
const path = require('path')

const css = fs.readFileSync(path.resolve(__dirname, 'email.css'), 'utf8')

ES6:

import fs from 'fs'
import path from 'path'

let css = fs.readFileSync(path.resolve(__dirname, 'email.css'), 'utf8')

2
HTMLファイルに対してこれを行うにはどうすればよいですか?兄弟ディレクトリにHTMLファイルがあり、それを読み取って文字列としてcheerioに読み込む必要がありますか?
lopezdp


0

node.jsとTypeScriptの両方で.jsonファイルを要求できます。これは、テキストのシリアル化に適したrequired()をサポートする唯一の形式です。コンパイル時ツールを使用して、https://github.com/cancerberoSgx/fs-to-jsonなどのjsonにファイルをパックできます


0

選択された回答は非推奨になり、推奨されなくなりました。NodeJSのドキュメントでは、次のような他のアプローチを提案しています。

他のNode.jsプログラムを介してモジュールをロードする

しかし、それはもはや拡大しません。

  • 次のような非常に単純なライブラリを使用できます:require-text

  • またはそれを自分で実装します(上記のパッケージのように:)

    var fs = require('fs');
    module.exports = function(name, require) {
       return fs.readFileSync(require.resolve(name)).toString();
    };
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.