Просматривать с помощью путей к папкам в моей системе
Когда я компилирую markdown-символы с помощью 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');
...
Как вы можете видеть, здесь есть абсолютные пути к моим файлам. Зачем? Как их удалить?
EDIT: вот мой 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
. та же проблема. Если я заменил значение baseir на instancee ihatebrowserify
, будет ошибка о чем-то, что не разрешено.
Ответы
Ответ 1
Это натолкнулось на меня и сегодня. Оказывается, теперь существует логическая опция --full-path
[0], которая решает проблему.
Например:
browserify -o bundle.js --full-path=false index.js
[0] https://github.com/substack/node-browserify/blob/master/bin/args.js
Ответ 2
Почти 6 месяцев спустя, и я видел ту же проблему. Теперь я нашел обходное решение, которое меня устраивало, и другие могли бы извлечь из этого выгоду.
Google предоставил мне этот отчет о проблеме: https://github.com/thlorenz/browserify-shim/issues/43 - который сообщает об этом раскрытии локального пути в системе "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
:
Сжатие браузера требует путей для лучшей минимизации, т.е. требует ( "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']
}
}
// ...
}
Ответ 3
Browserify разрешает абсолютный путь по умолчанию. Если вы не хотите видеть абсолютные пути, вы можете установить options.basedir
по своему усмотрению. Например:
var browserify = require('browserify-middleware');
var b = browserify({'opts.basedir': './'});
Ответ 4
Мое лучшее предположение, что где-то есть модули, которые включаются из абсолютных путей.
Это не происходит со мной при использовании браузера.
На самом деле это больше, чем предполагалось.
},{}],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")
; поэтому он должен включать этот модуль.
Если вы установите какой-либо Node глобальный (не знаете, как в Windows), чтобы посмотреть в C:\\Users\\Me\\AppData\\Roaming\\npm\\node_modules
, возможно, вам не придется включать полный путь, но я не могу быть уверен.
Ответ 5
Не совсем уверен, что это ответ на исходный вопрос, но у меня была аналогичная проблема. Вложенный файл js и внешний источник (с использованием exorcist), который был сгенерирован, содержали абсолютные пути к папкам в моей системе. После того, как головная боль выяснила, почему, похоже, виновник был babelify (ранее 6to5ify). https://github.com/substack/node-browserify/issues/663 и https://github.com/babel/babelify/issues/19
Решение просто:
browserify --debug -t [babelify - sourceMapRelative.]
или
browserify ({debug: true}) .transform(babelify.configure({ sourceMapRelative:..}))
Ответ 6
Существует новый плагин Browserify, доступный от автора Browserify. Он называется Bundle-Collapser. Он заменит пути папки числовыми индексами.