2013-05-19 19 views
22

私はfsオブジェクトを使用するファイルでbrowserifyを使用しようとしていました。私がそれをブラウズすると、require('fs')への呼び出しは変換されず、require{}を返します。Browserify with require( 'fs')

これに対応する方法はありますか?私はstackoverlowや他の場所でいくつかの提案を見てきましたが、どれも完全に実現していないようです。

私は実際に、私が教えるクラスのためにbrowserifyを使ってGoogleのウェブパッケージされたアプリケーションを作成したいと考えました。

ありがとうございます。

答えて

6

ブラウザは、どのファイルシステムを使用する必要がありますか? HTML5ファイルシステムは、従来のファイルシステムには匹敵しません。シンボリックリンクはありません。また、Web Workers以外では非同期でしかアクセスできません。

答えは:Node.jsで実行しているときにfsモジュールに依存することができる抽象レイヤーと、ブラウザーで実行しているときにHTML5 FS APIを書く。違いが大きすぎるため、あなたのためにbrowserify translateを実行できません。

+3

私はbrowserifyはそれがFSモジュールをサポートしていないことを示すbrowserifiedコード内のコメントを残して、少なくともことを期待推測:ES5のユーザー向けに翻訳

import template from '../template.html' const definition = { template } component.directive('myDirective',() => definition) 

。 –

+0

おそらく "抽象レイヤー"はここでは適切ではありませんが、node.jsのFileReaderなどの実装は(browserifyの一部として)可能性があります。
とにかく、欠落している変換が機能であり、私の部分では「バグ」ではないことを知ってうれしく思います。 –

41

あなたはfs.readFileSync()通話からのファイルの内容をインライン化したい場合は、brfsを使用することができます。

var fs = require('fs'); 
var src = fs.readFileSync(__dirname + '/file.txt'); 

は、その後の操作を行います。

browserify -t brfs main.js > bundle.js 

srcは、コンパイル時にfile.txtの内容に設定されます。 。

+0

興味深い考えですが、私のニーズを満たしていません。 –

14

ファイルシステムをbrowserifyで実行する場合は、npmをインストールできます。

npm install browserify-fs 

クライアント側でfsオブジェクトにアクセスできます。
ありがとう

+1

私は実際にbrowserify-fsをインストールし、それを必要としましたが、 "fs.readFileSyncは関数ではありません"という同じエラーが表示されます – Preprocezzor

0

Googleの誰でも、私はstringify変換ではるかに良い運があった。

https://github.com/JohnPostlethwait/stringify

ここでの答えは、私がHTTPリクエストを節約するために私の構成要素に文字列としてテンプレートをインポートしています(歓迎されていないが)イライラしてtemplateUrl約買って、JavaScriptファイルからそれらを保ちます。

何らかの理由でbrfsは、バーベルとうまくやりとりできず、仕事に就くための多くの注意点があります。

私はbrowserify-fsをまったく動作させることができませんでした。

しかし、stringifyの変換を見つけると、それは次のように簡単でした。

var template = require('../template.html') 

component.directive('myDirective', function() { 
    return { 
     template: template 
    } 
})