Lorsque je compile des symboles de démarque à l’aide de Browserify 3.30.2 (browserify file.js -o bundle.js
), j’obtiens un résultat semblable à celui-ci:
!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');
...
Comme vous pouvez le constater, il existe des chemins absolus vers mes fichiers ici. Pourquoi ? Comment est-ce que je peux les retirer ?
EDIT: voici mon fichier 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'));
},
});
Et pour exécuter node build > bundle.js
. même problème. Si je remplace basedir value par for exemplee ihatebrowserify
, il y a une erreur concernant un problème non résolu.
Cela m’a également frappé aujourd’hui. Il s'avère qu'il existe une option booléenne --full-path
[0] qui résout le problème.
Par exemple:
browserify -o bundle.js --full-path=false index.js
[0] https://github.com/substack/node-browserify/blob/master/bin/args.js
Presque 6 mois plus tard, et j'ai vu le même problème. Maintenant, j'ai trouvé une solution qui me convenait, et d'autres pourraient en bénéficier également.
Google m'a donné ce rapport de problème: https://github.com/thlorenz/browserify-shim/issues/43 - qui signale la divulgation de ce chemin d'accès système local sur "browserify-shim", bien qu'il s'agisse d'un " browserify "issue de ce que j'ai compris.
Cette question suggère une solution de contournement:
$ npm install -g intreq browser-pack browser-unpack
$ browserify example/main.js -t browserify-shim | browser-unpack | intreq | browser-pack
J'ai testé cela et j'étais satisfait des résultats. Cependant, je voulais aller plus loin et intégrer cela dans mon fichier Gruntfile.js. La solution que j'ai trouvée, testée et qui m'a fait plaisir est d'utiliser unpathify
:
Compressez browserify nécessite des chemins pour une meilleure minification, c’est-à-dire require ('some/long/path') => require (1)
Pour l'utiliser, installez simplement unpathify (npm install --save-dev unpathify
) et ajoutez-le à votre construction:
grunt.initConfig({
browserify: {
all: {
files: {
'build/all.js': ['some/file.js']
}
}
},
unpathify: {
all: {
src: ['build/all.js']
}
}
// ...
}
Browserify résout le chemin absolu par défaut. Si vous ne souhaitez pas voir les chemins absolus, vous pouvez définir options.basedir
comme vous le souhaitez. Par exemple;
var browserify = require('browserify-middleware');
var b = browserify({'opts.basedir': './'});
Ma meilleure hypothèse est que quelque part, des modules sont inclus à partir de chemins absolus.
Cela ne m'arrive pas lorsque j'utilise browserify.
En fait, c'est plus qu'une supposition.
},{}],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){
Vous avez _dereq_("C:\\Users\\Me\\AppData\\Roaming\\npm\\node_modules\\browserify\\node_modules\\insert-module-globals\\node_modules\\process\\browser.js")
; par conséquent, il doit inclure ce module.
Si vous définissez un nœud global (aucune idée sur Windows) à regarder dans C:\\Users\\Me\\AppData\\Roaming\\npm\\node_modules
, vous n'aurez peut-être pas à inclure le chemin complet, mais je ne peux pas en être sûr.
Pas tout à fait sûr que ce soit une réponse à la question initiale, mais j'avais un problème similaire. Le fichier js fourni et le plan source externe (à l'aide d'exorcist) en cours de génération contenaient des chemins d'accès absolus aux dossiers de mon système. Après un mal de tête pour comprendre pourquoi, il semble que le coupable était babelify (auparavant 6to5ify). https://github.com/substack/node-browserify/issues/663 & https://github.com/babel/babelify/issues/19
La solution est simple cependant:
browserify --debug -t [babelify - - SourceMapRelative.]
ou
browserify ({debug: true}) .transform (babelify.configure ({sourceMapRelative: '.'}))
Il existe un nouveau plugin Browserify disponible auprès de l'auteur de Browserify. Cela s'appelle Bundle-Collapser . Cela remplacera les chemins de dossiers par des index numériques.