web-dev-qa-db-ja.com

システム内のフォルダへのパスを使用してブラウザ化

Browserify 3.30.2を使用してマークダウンシンボルをコンパイルすると(browserify file.js -o bundle.js)、私はそのようなものを手に入れます:

!function(e){if("object"==typeof exports...[function(_dereq_,module,exports){

},{}],2:[function(_dereq_,module,exports){
...
...
[on line 8000] 
    : function (str, start, len) {
        if (start < 0) start = str.length + start;
        return str.substr(start, len);
    }
;

}).call(this,_dereq_("C:\\Users\\Me\\AppData\\Roaming\\npm\\node_modules\\browserify\\node_modules\\insert-module-globals\\node_modules\\process\\browser.js"))
},{"C:\\Users\\Me\\AppData\\Roaming\\npm\\node_modules\\browserify\\node_modules\\insert-module-globals\\node_modules\\process\\browser.js":11}],14:[function(_dereq_,module,exports){
module.exports=_dereq_(3)
},{}],15:[function(_dereq_,module,exports){
module.exports=_dereq_(4)
},{"./support/isBuffer":14,"C:\\Users\\ME\\AppData\\Roaming\\npm\\node_modules\\browserify\\node_modules\\insert-module-globals\\node_modules\\process\\browser.js":11,"inherits":10}],16:[function(_dereq_,module,exports){
var frep = _dereq_('frep');
var file = _dereq_('fs-utils');
var delims = _dereq_('delims');
var _ = _dereq_('lodash');
...

ご覧のとおり、ここに私のファイルへの絶対パスがあります。どうして ?どうすればそれらを削除できますか?

編集:ここに私のbuild.jsファイル

 var browserify = require('browserify-middleware')
fs = require('fs');
var b = browserify('./index.js', {
    'opts.basedir': './'
});
b({
    // Mocks up express req and res
    headers: []
}, {
    getHeader: function () {},
    setHeader: function () {},
    send: function (a) {
        console.log('send', a);
    },
    end: function (a) {
        //console.log('end', a.constructor.name);
        //  fs.write('bundle.js', a, undefined, undefined, function (err) {
        console.log(a.toString());
        //});
        //  a.pipe(fs.createWriteStream('bundle.js'));
    },

});

そして実行するにはnode build > bundle.js。同じ問題。 basedir値をinstanceeihatebrowserifyに置き換えると、何かが解決されないというエラーが発生します。

23
Vinz243

これは今日も私に出くわしました。ブールオプションがあることがわかりました--full-path [0]これで問題は解決しました。

例えば:

browserify -o bundle.js --full-path=false index.js

[0] https://github.com/substack/node-browserify/blob/master/bin/args.js

7
Song Gao

ほぼ6か月後、同じ問題が発生しました。今、私は自分に合った回避策を見つけました、そして他の人もそれから利益を得るかもしれません。

Googleからこの問題レポートが届きました: https://github.com/thlorenz/browserify-shim/issues/4 -これは「browserify-shim」に関するこのローカルシステムパスの開示を報告していますが、私が理解したことから、「ブラウザ化」の問題です。

この問題は、回避策を示唆しています。

$ npm install -g intreq browser-pack browser-unpack
$ browserify example/main.js -t browserify-shim | browser-unpack | intreq | browser-pack

私はこれをテストし、結果に満足しました。ただし、さらに進んで、これをGruntfile.jsに統合したいと思いました。私が見つけ、テストし、それが私を幸せにした解決策は、使用することです unpathify

より良い縮小のためにbrowserifyrequireパスを圧縮します。つまりrequire( 'some/long/path')=> require(1)

これを使用するには、unpathify(npm install --save-dev unpathify)そしてそれをビルドに追加します:

grunt.initConfig({
  browserify: {
    all: {
      files: {
        'build/all.js': ['some/file.js']
      }
    }
  },
  unpathify: {
    all: {
      src: ['build/all.js']
    }
  }
  // ...
}
5
Bruno Reis

Browserifyは、デフォルトとして絶対パスを解決します。絶対パスを表示したくない場合は、必要に応じてoptions.basedirを設定できます。例えば;

var browserify = require('browserify-middleware');
var b = browserify({'opts.basedir': './'});
3
Hüseyin BABAL

私の最善の推測は、どこかに、絶対パスから含まれているモジュールがあるということです。

Browserifyを使用しているときは、私には起こりません。


実際、それは推測以上のものです。

_},{}],2:[function(_dereq_,module,exports){
...
...
}).call(this,_dereq_("C:\\Users\\Me\\AppData\\Roaming\\npm\\node_modules\\browserify\\node_modules\\insert-module-globals\\node_modules\\process\\browser.js"))
},{"C:\\Users\\Me\\AppData\\Roaming\\npm\\node_modules\\browserify\\node_modules\\insert-module-globals\\node_modules\\process\\browser.js":11}],14:[function(_dereq_,module,exports){
_

_dereq_("C:\\Users\\Me\\AppData\\Roaming\\npm\\node_modules\\browserify\\node_modules\\insert-module-globals\\node_modules\\process\\browser.js")があります。したがって、そのモジュールを含める必要があります。

_C:\\Users\\Me\\AppData\\Roaming\\npm\\node_modules_を検索するようにNodeグローバル(Windowsではどのようにかわからない)]を設定した場合、フルパスを含める必要はないかもしれませんが、確信が持てません。

2
Scimonster

これが元の質問に対する答えであるかどうかは完全にはわかりませんが、私は同様の問題を抱えていました。バンドルされたjsファイルと生成された外部ソースマップ(exorcistを使用)には、システム上のフォルダーへの絶対パスが含まれていました。頭痛の種が原因を突き止めた後、犯人はバベリファイ(以前は6to5ify)だったようです。 https://github.com/substack/node-browserify/issues/66https://github.com/babel/babelify/issues/19

ただし、解決策は簡単です。

browserify --debug -t [babelify-sourceMapRelative。]

または

browserify({debug:true})。transform(babelify.configure({sourceMapRelative: '。'}))

2
jonbo

Browserifyの作者から入手できる新しいBrowserifyプラグインがあります。それは Bundle-Collapser と呼ばれます。フォルダパスが数値インデックスに置き換えられます。

0
Ryan