Задача
Я работаю над добавлением пары дополнительных шагов сборки к нашему текущему, функциональному конвейеру сборки. Проблема в том, что gulp не может найти модули, когда дело доходит до компиляции JavaScript. Ниже вы найдете соответствующий раздел нашего cloudbuild.yaml и скрипты bash.
Ожидаемые результаты
Мне нужно, чтобы Vue.js и SCSS были обработаны и подготовлены для развертывания в нашей производственной среде. В целом, наша цель состоит в том, чтобы удалить перенесенные JS и CSS из нашего репозитория Git и иметь только тот источник, с которым мы работаем, в репо.
Код поддержки
cloudbuild.yaml:
- name: 'gcr.io/cloud-builders/npm:node-9.10.0'
id: npm-install
entrypoint: 'bash'
args:
- '-c'
- |
sh nodeprep.sh
waitFor: ['-']
- name: 'gcr.io/cloud-builders/npm:node-9.10.0'
id: gulp-build
entrypoint: 'bash'
args:
- '-c'
- |
sh gulpprep.sh
waitFor: ['npm-install']
nodeprep.sh:
#!/bin/bash
npm install --production
npm rebuild node-sass --force # necessary to resolve architecture differences
gulpprep.sh
#!/bin/bash
node_modules/.bin/gulp deploy-build --production
Ошибка
В зависимости от флага --production
мы получаем разные ошибки. Вот ошибка, которую мы получаем при установленном флаге --production
, как показано выше в nodeprep.sh
:
: events.js:165
: throw er; // Unhandled 'error' event
: ^
:
: Error: Cannot find module 'Axios' from '/workspace/js/vue-mini-apps/ha/src'
: at /workspace/node_modules/browser-resolve/node_modules/resolve/lib/async.js:46:17
: at process (/workspace/node_modules/browser-resolve/node_modules/resolve/lib/async.js:173:43)
: at ondir (/workspace/node_modules/browser-resolve/node_modules/resolve/lib/async.js:188:17)
: at load (/workspace/node_modules/browser-resolve/node_modules/resolve/lib/async.js:69:43)
: at onex (/workspace/node_modules/browser-resolve/node_modules/resolve/lib/async.js:92:31)
: at /workspace/node_modules/browser-resolve/node_modules/resolve/lib/async.js:22:47
: at FSReqWrap.oncomplete (fs.js:170:21)
: Emitted 'error' event at:
: at Labeled.<anonymous> (/workspace/node_modules/read-only-stream/index.js:28:44)
: at Labeled.emit (events.js:180:13)
: at Labeled.<anonymous> (/workspace/node_modules/stream-splicer/index.js:130:18)
: at Labeled.emit (events.js:180:13)
: at Deps.<anonymous> (/workspace/node_modules/stream-splicer/index.js:130:18)
: at Deps.emit (events.js:180:13)
: at /workspace/node_modules/module-deps/index.js:361:30
: at onresolve (/workspace/node_modules/module-deps/index.js:179:25)
: at /workspace/node_modules/browserify/index.js:490:22
: at /workspace/node_modules/browser-resolve/index.js:265:24
2018/06/28 14:39:32 status changed to "ERROR"
ERROR
ERROR: build step "gcr.io/cloud-builders/npm@sha256:43d8b9b86f899f5622a668c7d7ad7493a323740440cf79089953cddc17a4ad2a" failed: exit status 1
2018/06/28 14:39:35 Build finished with ERROR status
Это вывод при удалении --production
:
Step #1 - "gulp-build": Already have image (with digest): gcr.io/cloud-builders/npm:node-9.10.0
Starting Step #1 - "gulp-build"
Step #1 - "gulp-build": module.js:545
Step #1 - "gulp-build": throw err;
Step #1 - "gulp-build": ^
Step #1 - "gulp-build":
Step #1 - "gulp-build": Error: Cannot find module '../lib/completion'
Step #1 - "gulp-build": at Function.Module._resolveFilename (module.js:543:15)
Step #1 - "gulp-build": at Function.Module._load (module.js:470:25)
Step #1 - "gulp-build": at Module.require (module.js:593:17)
Step #1 - "gulp-build": at require (internal/module.js:11:18)
Step #1 - "gulp-build": at Object.<anonymous> (/workspace/node_modules/.bin/gulp:13:18)
Step #1 - "gulp-build": at Module._compile (module.js:649:30)
Step #1 - "gulp-build": at Object.Module._extensions..js (module.js:660:10)
Step #1 - "gulp-build": at Module.load (module.js:561:32)
Step #1 - "gulp-build": at tryModuleLoad (module.js:501:12)
Step #1 - "gulp-build": at Function.Module._load (module.js:493:3)
Finished Step #1 - "gulp-build"
2018/06/28 16:24:44 status changed to "ERROR"
ERROR
ERROR: build step "gcr.io/cloud-builders/npm@sha256:43d8b9b86f899f5622a668c7d7ad7493a323740440cf79089953cddc17a4ad2a" failed: exit status 1
Перемещение node_modules
из каталога возвращает следующие ошибки:
:
: > proj@ build /workspace
: > cross-env NODE_ENV=production browserify -g envify js/vue-mini-apps/materials/app.js | uglifyjs -c warnings=false -m > js/vue-mini-apps/dist/materials.js
:
: module.js:545
: throw err;
: ^
:
: Error: Cannot find module '../dist'
: at Function.Module._resolveFilename (module.js:543:15)
: at Function.Module._load (module.js:470:25)
: at Module.require (module.js:593:17)
: at require (internal/module.js:11:18)
: at Object.<anonymous> (/workspace/node_modules/.bin/cross-env:3:1)
: at Module._compile (module.js:649:30)
: at Object.Module._extensions..js (module.js:660:10)
: at Module.load (module.js:561:32)
: at tryModuleLoad (module.js:501:12)
: at Function.Module._load (module.js:493:3)
: module.js:545
: throw err;
: ^
:
: Error: Cannot find module '../tools/node'
: at Function.Module._resolveFilename (module.js:543:15)
: at Function.Module._load (module.js:470:25)
: at Module.require (module.js:593:17)
: at require (internal/module.js:11:18)
: at Object.<anonymous> (/workspace/node_modules/.bin/uglifyjs:6:16)
: at Module._compile (module.js:649:30)
: at Object.Module._extensions..js (module.js:660:10)
: at Module.load (module.js:561:32)
: at tryModuleLoad (module.js:501:12)
: at Function.Module._load (module.js:493:3)
: npm ERR! code ELIFECYCLE
: npm
: ERR!
: errno 1
: npm ERR! proj@ build: `cross-env NODE_ENV=production browserify -g envify js/vue-mini-apps/materials/app.js | uglifyjs -c warnings=false -m > js/vue-mini-apps/dist/materials.js`
: npm ERR! Exit status 1
: npm ERR!
:
: npm ERR! Failed at the proj@ build script.
: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
:
: npm ERR! A complete log of this run can be found in:
: npm ERR! /builder/home/.npm/_logs/2018-06-28T22_33_47_659Z-debug.log
Сборки успешны на локальном хосте и не выполняются при выполнении этой команды:
container-builder-local --config=cloudbuild.yaml --dryrun=false .
Попытки (и совершенно неудачные) решения
Как только это будет работать с container-builder-local
, я смогу протестировать его на GCP. Прямо сейчас я довольно хорошо застрял, потому что я сделал все, что могу придумать на данный момент, включая:
rm -rf node_modules
как первая команда в nodeprep.sh
npm cache clear
просто чтобы быть уверенным (npm жалуется и рекомендует npm cache verify
вместо этого, кажется, все еще не имеет никакого эффекта)
- добавление
npm run-script build
(работает cross-env NODE_ENV=production browserify -g envify js/vue-mini-apps/materials/app.js | uglifyjs -c warnings=false -m > js/vue-mini-apps/dist/materials.js
).
- Я даже пытался переместить
node_modules
из каталога проекта, поэтому
npm install
не имеет другого выбора, кроме как создать новый каталог node_modules
- это приводит к тому, что gulp вообще не устанавливается при запуске npm install
.
Я немного растерялся из-за того, что мне делать дальше. Кажется, чем глубже я спускаюсь по этой кроличьей норе, тем более прогрессивно нарушаются эти этапы сборки.