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


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.readFileてrequire.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.