У меня есть базовая настройка gulp в VS2017, чтобы минимизировать мой Javascript. Я решил добавить gulp-sass (мой package.json говорит, что я использую gulp-sass v4.0.1), но он выдает эту ошибку:
C:\Work\MyProject\MyProject\node_modules\gulp-sass\index.js:66
let sassMap;
^^^
SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:373:25)
at Object.Module._extensions..js (module.js:404:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (C:\Work\MyProject\MyProject\gulpfile.js:11:12)
at Module._compile (module.js:397:26)
at Object.Module._extensions..js (module.js:404:10)
Мой gulpfile выглядит так:
var gulp = require('gulp');
var concat = require('gulp-concat');
var rename = require('gulp-rename');
var watch = require('gulp-watch');
var uglify = require('gulp-uglify');
var sass = require('gulp-sass');
gulp.task('minify', function () {
gulp.src('src/**/*.js')
.pipe(uglify({ mangle: false }))
.pipe(concat('scripts.min.js'))
.pipe(gulp.dest('Content'));
});
gulp.task('sass', function () {
gulp.src('src/css/**/*.scss')
.pipe(sass({ outputStyle: 'compressed' }))
.pipe(gulp.dest('Content'));
});
gulp.task('watch', function () {
gulp.watch('src/**/*.js', ['minify']);
});
Я немного погуглил, и было предложено простое исправление: добавить "use strict" в начало файла, вызывающего нарушение, в данном случае index.js: 66. Однако после этого я получаю:
Failed to run "C:\Work\MyProject\MyProject\Gulpfile.js"...
cmd.exe /c gulp --tasks-simple
C:\Work\MyProject\MyProject\node_modules\node-sass\lib\binding.js:15
throw new Error(errors.missingBinary());
^
Error: Missing binding C:\Work\MyProject\MyProject\node_modules\node-sass\vendor\win32-x64-47\binding.node
Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 5.x
Found bindings for the following environments:
- Windows 64-bit with Node.js 6.x
This usually happens because your environment has changed since running `npm install`.
Run `npm rebuild node-sass --force` to build the binding for your current environment.
at module.exports (C:\Work\MyProject\MyProject\node_modules\node-sass\lib\binding.js:15:13)
at Object.<anonymous> (C:\Work\MyProject\MyProject\node_modules\node-sass\lib\index.js:14:35)
at Module._compile (module.js:397:26)
at Object.Module._extensions..js (module.js:404:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (C:\Work\MyProject\MyProject\node_modules\gulp-sass\index.js:163:21)
at Module._compile (module.js:397:26)
Я использую Node.js v6. Я не понимаю, почему то, что должно быть простым процессом, дает мне эти ошибки. Что я делаю неправильно?
Обновлять:
Я выполнил следующие команды, предложенные в комментариях:
npm install node-sass -f
npm rebuild nose-sass
Оба работали успешно. Однако я все еще получаю эту ошибку:
Failed to run "C:\Work\MyProject\MyProject\Gulpfile.js"...
cmd.exe /c gulp --tasks-simple
C:\Work\MyProject\MyProject\node_modules\gulp-sass\index.js:66
let sassMap;
^^^
SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:373:25)
at Object.Module._extensions..js (module.js:404:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (C:\Work\MyProject\MyProject\gulpfile.js:8:12)
at Module._compile (module.js:397:26)
at Object.Module._extensions..js (module.js:404:10)
Обновление 2:
Мне посоветовали добавить «использовать строго»; в начало моего файла gulpfile.js, но возникает та же ошибка. Вот содержимое файла:
"use strict";
var gulp = require('gulp');
var sass = require('gulp-sass'); // If I comment this out, I can build
gulp.task('sass', function () {
gulp.src('src/css/**/*.scss')
.pipe(sass({ outputStyle: 'compressed' }))
.pipe(gulp.dest('Content'));
});
Наиболее частая проблема в сети - это версия Node.js <6.0, но я использую v6.11.1.
Я наконец-то нашел причину и решение; Я добавил это как ответ ниже для всех будущих читателей. Наслаждаться.
npm rebuild node-sass или npm install node-sass -f перестроят двоичные файлы или (второй) принудительно переустановят узел sass.
@muecas Спасибо за предложения. Я обновил вопрос, так как теперь я получаю другую ошибку, которую я получал до того, как начал ковыряться в / node_modules / gulp-sass - переустановка должна была устранить проблему, которую я вызвал, и теперь у меня вернулся к исходной проблеме. Не могли бы вы еще раз взглянуть?
@ ZamronyP.Juhara Спасибо, я обновил вопрос своей новой ошибкой
@MSOACC вам нужно добавить "use strict"; в начало вашего файла js gulp.
@muecas По-прежнему дает мне ту же ошибку. Если я закомментирую «var sass = require ('gulp-sass');» строку в gulpfile.js я могу по крайней мере построить, но как только она раскомментирована, она дает мне ту же ошибку, о которой я упоминал. Я обновлю вопрос, указав свое точное содержимое gulpfile.js, чтобы вы могли видеть
ОК, я сам исправил. Не могу поверить, что у большего числа людей не было этой ошибки; Напишу ответ будущим людям.





Удалось найти проблему, поэтому я отвечаю на свой вопрос будущим читателям.
Хотя у меня установлен node.js v6.11.1, Visual Studio 2017 поставляется в комплекте с собственной версией node, которую он использует по умолчанию. Даже если вы запускаете node -v в оболочке VS2017, и он сообщает вам, что работает под управлением v6.11.1, на самом деле - по умолчанию - выполняется все, что находит в .\node_mobules\.bin.
Решение такое:
В VS2017 выберите «Инструменты> Параметры> Проекты и решения> Управление веб-пакетами> Внешние веб-инструменты».
Вы, наверное, увидите это:
C:\Program Files\nodejs) и с помощью стрелок поместите его над версией .\node_modules\bin, например:В моем случае мне пришлось переместить $ (PATH) выше $ (VSINSTALLDIR) / Web / External, чтобы решить проблему.