Добавление перерывов в gulp-sass с помощью Task Runner

У меня есть базовая настройка 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'));
});

Добавление перерывов в gulp-sass с помощью Task Runner

Наиболее частая проблема в сети - это версия Node.js <6.0, но я использую v6.11.1.

Обновление 3: (решено)

Я наконец-то нашел причину и решение; Я добавил это как ответ ниже для всех будущих читателей. Наслаждаться.

stackoverflow.com/questions/37986800/…
Zamrony P. Juhara 25.06.2018 01:04
npm rebuild node-sass или npm install node-sass -f перестроят двоичные файлы или (второй) принудительно переустановят узел sass.
muecas 25.06.2018 01:54

@muecas Спасибо за предложения. Я обновил вопрос, так как теперь я получаю другую ошибку, которую я получал до того, как начал ковыряться в / node_modules / gulp-sass - переустановка должна была устранить проблему, которую я вызвал, и теперь у меня вернулся к исходной проблеме. Не могли бы вы еще раз взглянуть?

MSOACC 25.06.2018 22:48

@ ZamronyP.Juhara Спасибо, я обновил вопрос своей новой ошибкой

MSOACC 25.06.2018 22:49

@MSOACC вам нужно добавить "use strict"; в начало вашего файла js gulp.

muecas 25.06.2018 22:51

@muecas По-прежнему дает мне ту же ошибку. Если я закомментирую «var sass = require ('gulp-sass');» строку в gulpfile.js я могу по крайней мере построить, но как только она раскомментирована, она дает мне ту же ошибку, о которой я упоминал. Я обновлю вопрос, указав свое точное содержимое gulpfile.js, чтобы вы могли видеть

MSOACC 25.06.2018 22:56

ОК, я сам исправил. Не могу поверить, что у большего числа людей не было этой ошибки; Напишу ответ будущим людям.

MSOACC 25.06.2018 23:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
7
1 249
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Удалось найти проблему, поэтому я отвечаю на свой вопрос будущим читателям.

Хотя у меня установлен node.js v6.11.1, Visual Studio 2017 поставляется в комплекте с собственной версией node, которую он использует по умолчанию. Даже если вы запускаете node -v в оболочке VS2017, и он сообщает вам, что работает под управлением v6.11.1, на самом деле - по умолчанию - выполняется все, что находит в .\node_mobules\.bin.

Решение такое:

  1. В VS2017 выберите «Инструменты> Параметры> Проекты и решения> Управление веб-пакетами> Внешние веб-инструменты».

  2. Вы, наверное, увидите это:

  1. Добавьте путь к вашей автономной установке узла (по умолчанию C:\Program Files\nodejs) и с помощью стрелок поместите его над версией .\node_modules\bin, например:

  1. Нажмите OK и либо обновите проводник Task Runner, либо перезапустите VS2017. Теперь ваш gulpfile должен быть собран.

В моем случае мне пришлось переместить $ (PATH) выше $ (VSINSTALLDIR) / Web / External, чтобы решить проблему.

Другие вопросы по теме