Browserify包含系统中文件夹的路径

时间:2014-02-24 16:17:18

标签: javascript node.js browserify

当我使用Browserify 3.30.2(browserify file.js -o bundle.js)编译markdown-symbols时,我得到类似的东西:

!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。同样的问题。如果我用例如ihatebrowserify替换basedir值,则会出现关于未解决的错误的错误。

6 个答案:

答案 0 :(得分:7)

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

例如:

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

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

答案 1 :(得分:5)

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

Google已向我提供了此问题报告:https://github.com/thlorenz/browserify-shim/issues/43 - 它报告了本地系统路径披露在&#34; browserify-shim&#34;,尽管它是&#34; browserify&#34;我所理解的问题。

该问题表明了一种解决方法:

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

我对此进行了测试并对结果表示满意。但是我想进一步,并将其集成到我的Gruntfile.js中。我发现,测试并让我满意的解决方案是使用unpathify

  

压缩browserify需要路径以获得更好的缩小,即需要(&#39; some / long / path&#39;)=&gt;要求(1)

要使用它,只需安装unpathify(npm install --save-dev unpathify)并将其添加到您的构建中:

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

答案 2 :(得分:3)

Browserify将绝对路径解析为默认路径。如果您不想查看绝对路径,可以根据需要设置options.basedir。例如;

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

答案 3 :(得分:2)

我最好的猜测是在某处,绝对路径中包含模块。

使用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上),您可能不必包含完整路径,但我无法确定。

答案 4 :(得分:2)

不完全确定这是否是原始问题的答案,但我遇到了类似的问题。生成的捆绑js文件和外部源映射(使用exorcist)包含我系统上文件夹的绝对路径。在弄清楚为什么之后,似乎罪魁祸首是babelify(之前是6to5ify)。 https://github.com/substack/node-browserify/issues/663&amp; https://github.com/babel/babelify/issues/19

解决方案很简单:

  

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

  

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

答案 5 :(得分:0)

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