C'est un peu long mais j'ai besoin de l'exemple de code pour illustrer ma confusion. Après quoi, je suis intéressé par la réponse à la question suivante :
- Comment puis-je utiliser
require('module')
au lieu derequire('../../src/module')
orequire('./module')
? - Comment puis-je réutiliser
./index.js
surspec/specs.js
sans dupliquer le travail ? (Et en évitantsrc/app.js
de fonctionner car c'est un module d'entrée).
J'ai déjà lancé plusieurs projets basés sur le navigateur et j'adore browserify et grogner. Mais chaque projet meurt au même point dans ma courbe de développement/apprentissage. Une fois que j'ajoute les tests au mélange et que je dois gérer deux browserify faisceaux ( app.js
y spec/specs.js
), tout le système s'écroule. Je vais vous expliquer :
Yo uso grunt-browserify et définir mon répertoire initial :
.
├── Gruntfile.js
├── index.js (generated via grunt-browserify) [1]
├── lib
│ ├── jquery
│ │ └── jquery.js [2]
│ └── jquery-ui
│ └── jquery-ui.js [3]
├── spec
│ ├── specs.js (generated via grunt-browserify) [4]
│ └── src
│ ├── spec_helper.js (entry)
│ └── module_spec.js (entry)
└── src
├── app.js (entry)
└── module.js
- Utilise un fichier d'entrée (
src/app.js
) et fait une marche de code pour regrouper tous les requis modules. - Utilise browserify-shim pour alias
jquery
. - est juste un alias de
jquery-ui
sans cale (nécessaire après avoirvar $ = require('jquery')
). - Utilise tous les fichiers d'aide et de spécification dans le fichier
spec/src
comme modules d'entrée.
Je vais passer en revue ma configuration :
browserify: {
dist: {
files: {
'index.js': ['src/app.js']
}
}
}
// in app.js
var MyModule = require('./module'); // <-- relative path required?!
Joyeux
Maintenant, ajoutez jquery :
browserify: {
options: {
shim: {
jquery: {
path: 'lib/jquery/jquery.js',
exports: '$'
}
},
noParse: ['lib/**/*.js'],
alias: [
'lib/jquery-ui/jquery-ui.js:jquery-ui'
]
},
dist: {
files: {
'index.js': ['src/app.js']
}
}
}
// in app.js
var $ = require('jquery');
require('jquery-ui');
var MyModule = require('./module');
Joyeux
Maintenant, ajoutez les spécifications :
options: {
shim: {
jquery: {
path: 'lib/jquery/jquery.js',
exports: '$'
}
},
noParse: ['lib/**/*.js'],
alias: [
'lib/jquery-ui/jquery-ui.js:jquery-ui'
]
},
dist: {
files: {
'app.js': 'src/app.js'
}
},
spec: {
files: {
'spec/specs.js': ['spec/src/**/*helper.js', 'spec/src/**/*spec.js']
}
}
// in app.js
var $ = require('jquery');
require('jquery-ui');
var MyModule = require('./module');
// in spec/src/module_spec.js
describe("MyModule", function() {
var MyModule = require('../../src/module'); // <-- This looks like butt!!!
});
Triste
Pour résumer : Comment puis-je...
- Utilisez
require('module')
au lieu derequire('../../src/module')
orequire('./module')
? - réutiliser
./index.js
surspec/specs.js
sans dupliquer le travail ? (Et en évitantsrc/app.js
de fonctionner car c'est un module d'entrée).