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
。 同样的问题。 如果我通过例如ihatebrowserify
replacebasedir值,那么关于未解决的问题有一个错误。
今天也遇到了我。 原来有一个布尔选项--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。