Un petit projet que j'ai commencé à faire utiliser un module node (installé via npm ) qui déclare const
variables. L'exécution et le test de ce projet se passe bien, mais browserify échoue lorsque UglifyJS est exécuté.
Unxpected token : mot-clé (const)
Voici un fichier Gulp générique que j'ai utilisé avec succès pour quelques autres projets passés sans ce problème (c'est-à-dire sans ce module node particulier).
gulpfile.js
'use strict';
const browserify = require('browserify');
const gulp = require('gulp');
const source = require('vinyl-source-stream');
const derequire = require('gulp-derequire');
const buffer = require('vinyl-buffer');
const uglify = require('gulp-uglify');
const sourcemaps = require('gulp-sourcemaps');
const gutil = require('gulp-util');
const path = require('path');
const pkg = require('./package');
const upperCamelCase = require('uppercamelcase');
const SRC_PATH = path.dirname(pkg.main);
const DIST_PATH = path.dirname(pkg.browser);
const INPUT_FILE = path.basename(pkg.main);
const OUTPUT_FILE = path.basename(pkg.browser);
const MODULE_NAME = upperCamelCase(pkg.name);
gulp.task('default', () => {
// set up the browserify instance on a task basis
var b = browserify({
entries: INPUT_FILE,
basedir: SRC_PATH,
transform: ['babelify'],
standalone: MODULE_NAME,
debug: true
});
return b.bundle()
.pipe(source(OUTPUT_FILE))
.pipe(buffer())
.pipe(derequire())
.pipe(sourcemaps.init({loadMaps: true}))
.pipe(uglify())
.on('error', gutil.log)
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest(DIST_PATH))
;
});
J'ai essayé de résoudre ce problème en remplaçant tous les const
a var
dans ce module installé par npm, et tout va bien. Je ne comprends donc pas l'échec.
Quel est le problème avec const
? Sauf si quelqu'un utilise IE10, todo Les principaux navigateurs prennent en charge cette syntaxe.
Existe-t-il un moyen de résoudre ce problème sans avoir à modifier le module du nœud ?
Mise à jour
J'ai remplacé temporairement (ou définitivement) UglifyJS par Butternut et semblent fonctionner.
0 votes
N'est-ce pas un problème avec la version du nœud ? N'avez-vous pas besoin de la version 8+ de node pour avoir
const
disponible ? (je ne sais pas quand il a été introduit)0 votes
J'ai utilisé
const
depuis la version 4. Et j'utilise actuellement la version 8.9.1 LTS.0 votes
Ok, c'est étrange alors. Quel est le message d'erreur que vous voyez ?
0 votes
@this.lau_ le même message d'erreur que dans le titre, mais je l'ai ajouté dans la question également pour plus de clarté.
0 votes
Il ne doit pas nécessairement s'agir de la "const". Il peut s'agir d'un des modules dont vous avez besoin.
0 votes
@Adrián J'ai pensé la même chose, mais j'ai édité manuellement le fichier sous le nom de
node_modules
et a remplacé tous lesconst
avar
et UglifyJS ne s'est pas plaint du tout. Ensuite, j'ai ajouté aconst T = 'foo';
et UglifyJS s'est encore plaint.0 votes
Peut-être avez-vous besoin d'un autre module d'aide, je me souviens que la même chose m'est arrivée sur un nouveau projet. Je ne suis pas sûr de la façon dont je l'ai résolu mais j'ai aussi ces modules : --------------------------------------------- "grunt-contrib-concat" : "1.0.1", "grunt-contrib-copy" : "^1.0.0", "grunt-contrib-jshint" : "1.1.0", "grunt-contrib-less" : "1.4.0", "grunt-contrib-uglify": "2.0.0", "grunt-contrib-watch": "1.0.0",
0 votes
Ce que je veux dire, c'est que vous pourriez essayer de désinstaller cette version de UglifyJS et d'installer celle que j'ai installée (si ce n'est pas la même). Cela devrait vous renseigner sur les dépendances, si elles sont nécessaires.