«Ошибка типа: file.pipe не является функцией» при попытке опубликовать скомпилированный CSS в корзину GCP через пакет gulp-gcloud-publish

#google-cloud-platform #sass #gulp #google-cloud-storage #gulp-sass

#google-cloud-platform #sass #gulp #google-облачное хранилище #gulp-sass

Вопрос:

Я пытаюсь использовать пакет gulp-gcloud-publish для загрузки моих скомпилированных скриптов SCSS и JS в мою корзину GCP, и я рву на себе волосы, пытаясь заставить его работать. Я предполагаю, что это связано с тем, что пакет устарел и, возможно, несовместим с Gulp 4.

Вот мои зависимости от gulp, которые я загружаю:

 const autoprefixer = require("autoprefixer"); // v 9.5.1
const cssnano = require("cssnano"); // v 4.1.10
const { src, dest, watch, series, parallel } = require("gulp"); // v 4.0.1
const postcss = require("gulp-postcss"); // v 8.0.0"
const sass = require("gulp-sass"); // v 4.0.2
const uglify = require('gulp-uglify'); // v 3.0.2
const jshint = require('gulp-jshint'); // v 2.1.0
var gcPub = require('gulp-gcloud-publish'); // v 2.1.1
var log = require('fancy-log'); // v 1.3.3
 

Вот мои пути к файлам для моих файлов SCSS и JS:

 const files = {
  scssPath: './src/scss/**/*.scss',
  jsPath: 'src/js/**/*.js'
}
 

Вот моя задача развертывания, которая у меня есть для компиляции моего SASS и загрузки скомпилированного файла CSS в мою корзину GCP (я передаю путь к файлу SCSS функции gulp src / keyFilename и projectId ссылаюсь на переменные репозитория BitBucket, которые я определил):

 function scssTaskGCP() {
  return src(files.scssPath)
    .pipe(sass())
    .pipe(postcss([ autoprefixer(), cssnano()]))
    .pipe(gcPub(
      {
        bucket: 'bucket-name',
        keyFilename: process.env.GCP_KEY_FILE,
        projectId: process.env.GCP_PROJECT_ID,
        base: '/assets/css',
        public: true,
        resumable: true,
        transformDestination: function(path) {
          return path.toLowerCase();
        },
        metadata: {
          cacheControl: 'max-age=315360000, no-transform, public',
        }
      }
    ));
}
 

У меня вышеуказанная функция ведет себя очень похоже на пример в README пакета. Одно из отличий заключается в том, что в примере передается один файл и загружается его в корзину GCP, и я передаю динамическое имя файла для покрытия нескольких файлов SASS и компиляции файлов SASS в один скрипт.

Я не думаю, что пакету это нравится, поскольку я получаю это сообщение об ошибке при попытке запустить задачу scssTaskGCP (), которая выполняется через мой конвейер CI / CD:

   gulp deploy
[22:32:36] Using gulpfile /opt/atlassian/pipelines/agent/project-folder/hca-craft/gulpfile.js
[22:32:36] Starting 'deploy'...
[22:32:36] Starting 'scssTaskGCP'...
[22:32:37] 'scssTaskGCP' errored after 846 ms
**[22:32:37] TypeError: file.pipe is not a function**
    **at DestroyableTransform._transform (/opt/atlassian/pipelines/agent/build/project-folder/node_modules/gulp-gcloud-publish/libs/index.js:113:10)**
   ...
[22:32:37] 'deploy' errored after 848 ms
 

Я не уверен, что я делаю не так и что еще я могу попробовать. Возможно, мне нужно выяснить, как реализовать альтернативу Gulp. Кто-нибудь может мне помочь с этим, пожалуйста?? 🙁
Спасибо!

Комментарии:

1. Обновление: мне пришлось перейти на Gulp 3.9.1, чтобы это сработало. Похоже, что пакет несовместим с Gulp 4. Я поставил здесь проблему: github.com/albertorestifo/gulp-gcloud-publish/issues/14

2. Итак, это работает сейчас? Если это решение, то я бы рекомендовал опубликовать его в качестве ответа самому себе и принять его, чтобы другие, которые нашли этот пост, могли увидеть, что на него дан ответ (я имею в виду, решаемый). Просто чтобы люди могли найти это, даже если они не ищут в репозитории github.