web-dev-qa-db-fra.com

Browserify ne trouve pas le module en essayant de regrouper plusieurs fichiers js

C’est mon premier jour de travail sur le noeud; j’ai des problèmes pour essayer de regrouper des fichiers js. 

MyFolder
|-- app (folder)   
|  |-- Collections (contains: movies.js)   
|  |-- Models (contains: movie.js)  
|  |-- node_modules  
|-- main.js  
|-- node_modules (folder)    
|-- static (folder)  

Ceci est le contenu des fichiers js que je veux compresser en static/bundle.js 

 // app/models/movie.js  
 var Backbone = require("backbone");
 var Movie = Backbone.Model.extend({
   defaults: {
     title: "default",
     year: 0,
     description: "empty",
     selected: false
   }
 });
 module.exports = Movie;

 // app/collections/movies.js  
 var Backbone = require("backbone");
 var Movie = require('models/movie');
 var Movies = Backbone.Collection.extend({
      model: Movie
 });
 module.exports = Movies;

Lorsque je lance browserify -r ./app/main:app > static/bundle.js, le fichier bundle.js est créé avec les scripts de app/main.js. Cela fonctionne comme prévu. 

Mais quand je lance browserify -r ./app/collections/movies.js:movies \ -r ./app/models/movie.js:movie > static/bundle.js, il crée un bundle.js vide et montre ceci: 

Error: Cannot find module '/Users/MyFolder/app/models/movie.js:movie' from '/Users/MyFolder'  

Mon dossier app/node_modules est synchronisé avec ln -sf ../models . et ln -sf ../collections . 

Question 1: Avez-vous une idée de ce que je fais mal?
Question 2: Si static/bundle.js existe. L'exécution de browserify écrase-t-elle le fichier ou non? Sur mes tests locaux, il ne remplace pas, suis-je supposé supprimer ce fichier à chaque fois pour une mise à jour?

11
Ricardo Castañeda

Peut-être envisager d'ajouter ./ à votre chemin: 

var Movie = require('./models/movie');

voir: Comment utiliser browserify pour regrouper une application dorsale?

24
cheshireoctopus

Pour les personnes venant des moteurs de recherche:

Il se peut que vous utilisiez un Mac et que vous n’ayez pas utilisé la casse appropriée tout en exigeant le fichier.

Ceci est équivalent dans mac:

require('./someFile');
require('./somefile'); 

Mais pas en cento par exemple.

9
Sumit Kushwaha

Si vous utilisez votre débogueur et que vous entrez dans l'appel require, vous vous retrouverez dans un code minifié (généralement).

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require== ...

Allez sur votre console et inspectez t[o][1]

Cela vous montrera une liste des chemins corrects pour vos modules.

Object {
    '<module name>' : <id>
    ...
}

Si cela devient trop déroutant, supprimez temporairement la première ligne de votre fichier bundle.js compilé (j'utilise alt-cmd-l dans PhpStorm) et réessayez.

0
Henry