Je commencerai tout de suite par un exemple de ma structure de code. Supposons que les trois fichiers triviales résident dans le même répertoire appelé /path/from/root/js/src
Générer des SourceMaps pour un seul fichier js qui inclut des modules avec npm require et gulp
module1.js suivants:
console.log(1);
module2.js:
console.log(2);
app.js:
require('./module1');
require('./module2');
Ensuite, j'utilise la tâche de gulp suivante pour compiler javascript dans un fichier avec gulp:
var gulp = require('gulp');
var sourcemaps = require('gulp-sourcemaps');
var path = require('path');
var browserify = require('gulp-browserify');
gulp.task('default', function() {
gulp.src(['./js/src/app.js'])
.pipe(sourcemaps.init())
.pipe(browserify()).on('error', function(err){
console.log(err);
})
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest(function(file) {
file.base = path.dirname(file.path);
return path.join(path.dirname(file.path), '/../');
}))
});
Après l'exécution gulp
Je reçois le javascript compilé app.js
qui se connecte à seulement 1 2 et un app.js.map
comme prévu, mais il n'y a pas de référence au fichier d'origine dans le navigateur.
Vous pouvez vérifier qu'en regardant les lignes de console 1 et 2, elles sont référencées par app.js
, et non par module1|2.js
. Si j'avais besoin de réparer un bogue, je n'aurais aucune idée du fichier qui génèrera les notations de la console à l'avenir, car les fichiers grossissent dans mon projet.
Qu'est-ce que je fais mal? Est-ce que je n'utilise pas les sourcemaps correctement?
Le fichier app.js.map
ne fait pas référence aux modules, il ressemble à ceci:
{
"version":3,
"names":[],
"mappings":"",
"sources":["app.js"],
"sourcesContent":["require('./module1');\r\nrequire('./module2');"],
"file":"app.js"
}