web-dev-qa-db-fra.com

Browserify avec des chemins d'accès aux dossiers de mon système

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.

22
Vinz243

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

6
Song Gao

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']
    }
  }
  // ...
}
4
Bruno Reis

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': './'});
2
Hüseyin BABAL

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.

1
Scimonster

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: '.'}))

1
jonbo

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.

0
Ryan