Добавление gulp-sass перерывов исполнителем задач - PullRequest
0 голосов
/ 25 июня 2018

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

Я немного погуглил, и было предложено простое исправление - добавить «используйте строгий» в начало файла-нарушителя, в данном случае 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'));
});

enter image description here

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

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

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

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

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

0 голосов
/ 26 июня 2018

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

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

Решение заключается в следующем:

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

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

enter image description here

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

enter image description here

Нажмите OK и либо обновите проводник задач, либо перезапустите VS2017.Ваш gulpfile должен теперь построить.

enter image description here

...