2016-08-04 14 views
2

私はノードモジュールを持っており、webpackと互換性を持たせたいと思っています。私は現在、次のパターンを使用しています:Webpackの解決済みのパスでファイルを読む

const fs = require('fs'); 
const someTemplate = require.resolve('./templates/template.css'); 

fs.readFile(someTemplate, 'utf8', (err, templateStr) => { 
    // Do something with`templateStr` 
}); 

問題はrequire.resolveではなく、数にreadFileの操作を行って、パスの、そしてもちろんのモジュールID(番号)を返しますが失敗しようとしていることです。

ノードとWebpackの両方と互換性を持たせるにはどうすればよいですか。

+0

webpackとの互換性をどういう意味ですか? –

+0

問題が発生しましたか? "ノードとウェブパックの両方と互換性がある"という意味と、発生したエラーや問題の詳細については、この質問に答える必要があります。 – rdgd

+0

問題は、 'require.resolve'がパスの代わりにモジュールID(数値)を返し、もちろん数字のreadFile操作を行うのが失敗するということです。コードはWebpackでは動作しません。 – DaveJ

答えて

8

私はこれを見つけるために深く掘り下げなければならなかった。

webpackと一緒にbrowserifyプラグインを使用すると解決できるようです。

SOのリンクのみの

次のノードのソース持っていると言う答えることはできませんので、下記の答えはコピー&ペーストである:あなたの設定に次のローダーを追加し、npm install transform-loader brfs --save

var test = require('fs').readFileSync('./test.txt', 'utf8'); 

を:

module.exports = { 
    context: __dirname, 
    entry: "./index.js", 
    module: { 
     loaders: [ 
      { 
       test: /\.js$/, 
       loader: "transform?brfs" 
      } 
     ] 
    } 
} 

そしてここでは、あなたのリンクです:https://github.com/webpack/transform-loader#typical-brfs-example

+0

あなたの答えをありがとう。私はローダーを追加せずにこれを行う方法を探していたと思います。私の元の質問で使用したのと同じパターンである必要はありません。 "template.css"を 'template.css.js'に文字列としてエクスポートするだけです。 – DaveJ

3

Webpackは、フロントエンド用のjsコードをバンドルしています。ブラウザにfsモジュールがなく、readFileを実行できません。 template.cssを有効なjsに変換し、requireをwebpackで変換するか、またはwebpack loaderを使用して、そのような変換をオンザフライで行うことができます。

関連する問題