Browserify与我的系统中的文件夹的path

当我使用Browserify 3.30.2(browserify file.js 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'); ... 

正如你所看到的,这里有我的文件的绝对path。 为什么? 我怎样才能删除它们?

编辑:这是我的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 。 同样的问题。 如果我通过例如ihatebrowserifyreplacebasedir值,那么关于未解决的问题有一个错误。

今天也遇到了我。 原来有一个布尔选项--full-path [0]现在可以解决这个问题。

例如:

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

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

差不多6个月后,我看到了同样的问题。 现在我find了适合我的解决方法,其他人也可以从中受益。

谷歌给了我这个问题报告: https : //github.com/thlorenz/browserify-shim/issues/43 – 它报告“browserify-shim”这个本地系统path披露,虽然这是一个“browserify”问题我所理解的

这个问题提出了一个解决方法:

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

我已经testing过这个,并且对结果感到满意。 但是我想更进一步,并将其整合到我的Gruntfile.js中。 我find的testing解决scheme使我感到高兴的是使用unpathify

压缩browserify需要更好的缩小path,即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'] } } // ... } 

Browserify会将绝对pathparsing为默认path。 如果你不想看到绝对path,你可以根据需要设置options.basedir 。 例如;

 var browserify = require('browserify-middleware'); var b = browserify({'opts.basedir': './'}); 

我最好的猜测是,在某个地方,有绝对path包含模块。

使用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设置一些节点全局(不知道如何在Windows上),你可能不需要包含完整path,但是我可以不能确定。

不完全确定这是否是对原始问题的回答,但是我也有类似的问题。 捆绑的js文件和正在生成的外部源映射(使用驱魔者)包含了我系统上文件夹的绝对path。 头痛后,找出原因,似乎罪魁祸首是babelify(以前6to5ify)。 https://github.com/substack/node-browserify/issues/663&https://github.com/babel/babelify/issues/19

解决scheme虽然简单,

browserify –debug -t [babelify –sourceMapRelative。 ]

要么

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

Browserify的作者提供了一个新的Browserify插件。 它被称为Bundle-Collapser 。 它将用数字索引replace文件夹path。