Создание приложения ionic angular терпит неудачу при сборке из teamcity, но преуспевает везде

Мы работаем над новым угловым ионным приложением, и оно строится на всех наших машинах из powershell, но на нашей машине сборки, когда оно извлекает файлы из perforce на наш диск D:, его не удается построить. Наша машина сборки использует teamcity, и мы используем шаг сборки powershell для запуска наших команд ng. Я могу взять точно такие же файлы, и они будут собраны, если я явно укажу на них скрипт powershell (перед этим я даже удалил node_modules).

Вот какую ошибку мы получаем. Я удалил части пути, связанные с нашей машиной сборки, чтобы сделать его чище.

ERROR in ./src/global.scss (<path to application>/node_modules/css-loader/dist/cjs.js??ref--13-1!<path to application>/node_modules/postcss-loader/src??embedded!/node_modules/sass-loader/dist/cjs.js??ref--13-3!./src/global.scss)
Module build failed (from <path to application>/node_modules/postcss-loader/src/index.js):
Error: Failed to find '@ionic/angular/css/core.css'
  in [
    <path to application>\projects\ta\src
   ]
   at resolveModule.catch.catch (<path to application>\node_modules\postcss-import\lib\resolve-id.js:35:13)
@ ./src/global.scss 2:26-225
@ multi ./src/theme/variables.scss ./src/global.scss ./src/theme/site.scss

Я проверил, действительно ли файл @ionic/angular/css/core.css отсутствует, и он был в node_modules, даже если он не смог его найти.

Мы используем следующую команду для построения

ng run ta:build --verbose

Мы используем следующие версии различных программ

  • Нм: 6.9.0
  • Угловой интерфейс командной строки: 1.6.7
  • Узел: 10.16.0

Я не очень хорошо знаком с созданием угловых приложений, поэтому, если вам нужна другая информация, сообщите мне, и я могу ее предоставить.

{
   "name": "tenantapp",
   "version": "0.0.1",
   "author": "Ionic Framework",
   "homepage": "https://ionicframework.com/",
   "scripts": {
      "ng": "ng",
      "start": "ng serve",
      "build": "ng build",
      "test": "ng test",
      "lint": "ng lint",
      "e2e": "ng e2e",
      "start:ta": "node --max-old-space-size=8192 \"node_modules\\@angular\\cli\\bin\\ng\" serve ta --open",
      "build:ionic": "ionic build"
   },
   "private": true,
   "dependencies": {
      "@angular/animations": "^10.0.9",
      "@angular/cdk": "^10.1.3",
      "@angular/common": "~9.1.6",
      "@angular/core": "~9.1.6",
      "@angular/forms": "~9.1.6",
      "@angular/material": "^10.1.3",
      "@angular/platform-browser": "~9.1.6",
      "@angular/platform-browser-dynamic": "~9.1.6",
      "@angular/router": "~9.1.6",
      "@angular/service-worker": "~9.1.6",
      "@capacitor/android": "^2.3.0",
      "@capacitor/core": "2.3.0",
      "@capacitor/ios": "^2.3.0",
      "@ionic-native/core": "^5.0.7",
      "@ionic-native/splash-screen": "^5.0.0",
      "@ionic-native/status-bar": "^5.0.0",
      "@ionic/angular": "^5.0.0",
      "@ionic/cli": "^6.12.1",
      "@ionic/pwa-elements": "^3.0.1",
      "fibers": "^3.1.0",
      "ng-recaptcha": "^6.0.2",
      "node-sass": "^4.14.1",
      "primeng": "^10.0.0-rc.3",
      "rxjs": "^6.5.5",
      "tslib": "^1.10.0",
      "zone.js": "~0.10.2"
   },
   "devDependencies": {
      "@angular-devkit/build-angular": "~0.901.5",
      "@angular/cli": "~9.1.5",
      "@angular/compiler": "~9.1.6",
      "@angular/compiler-cli": "~9.1.6",
      "@angular/language-service": "~9.1.6",
      "@capacitor/cli": "2.3.0",
      "@ionic/angular-toolkit": "^2.1.1",
      "@types/jasmine": "~3.5.0",
      "@types/jasminewd2": "~2.0.3",
      "@types/node": "^12.11.1",
      "codelyzer": "^5.1.2",
      "jasmine-core": "~3.5.0",
      "jasmine-spec-reporter": "~4.2.1",
      "karma": "~5.0.0",
      "karma-chrome-launcher": "~3.1.0",
      "karma-coverage-istanbul-reporter": "~2.1.0",
      "karma-jasmine": "~3.0.1",
      "karma-jasmine-html-reporter": "^1.4.2",
      "protractor": "~5.4.3",
      "ts-node": "~8.3.0",
      "tslint": "~6.1.0",
      "typescript": "~3.8.3"
   },
   "description": "An Ionic project"
}

Обновлено: Я не упомянул об этом в первоначальном вопросе, но диск D: - это RAM-диск. В конечном итоге это оказалось очень важной информацией, и я обновил вопрос, включив его и тег ramdisk, так что, надеюсь, другие найдут это решение быстрее, чем я, в будущем.

Первым делом удалите папку node_modules и запустите npm install Затем, если вы используете Ionic, соберите с помощью этой команды: ionic build Если у вас все еще есть проблемы, добавьте свой package.json в тему

Shinichi Kudo 22.12.2020 15:43

@ShinichiKudo Я добавил наш package.json, когда я получаю исходный код с p4, у нас нет node_mobules, и он не будет, даже когда я бегу npm install. Если я потом возьму те же файлы, которые вытащены из p4, и соберу их из командной строки вместо teamcity, все будет нормально. Команды точно такие же, как и в teamcity и powershell, и я сделал это с тем же пользователем.

Max Young 23.12.2020 03:51

Вы пытались обновить версию Node? Например, используя v12, чтобы увидеть, есть ли у вас такая же ошибка? Также попробуйте классику Invalidate Cache/Restart

Shinichi Kudo 23.12.2020 11:23

@ShinichiKudo Я не пытался обновить версию узла, но я подтвердил, что версия узла одинакова на компьютере сборки и на моем локальном компьютере. Мы пытались аннулировать кеш, но это не дало никакого эффекта.

Max Young 23.12.2020 22:15

@ShinichiKudo Просто хотел пропинговать вас, потому что вы очень помогли мне начать определение проблемы, и я подумал, что вы можете найти решение проблемы интересным. Спасибо за вашу помощь.

Max Young 17.01.2021 03:32

Рад, что вы решили свою проблему, исходная проблема

Shinichi Kudo 18.01.2021 08:21
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
8
6
468
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Создайте сценарий сборки также, если вы создаете ионный запуск, эти команды также входят в систему для сборки сервер и собрать вручную там же

Ionic cordova platform add android/ios
ionic cordova build ios/android --prod --release
Ответ принят как подходящий

Наконец, мы смогли найти проблему путем отладки в fs.js, где мы получили следующую ошибку. Эта ошибка была зафиксирована на более низком уровне, и мы получили только ошибку в моем вопросе без отладки в fs.js.

EISDIR: illegal operation on a directory

Проблема, с которой мы столкнулись, заключалась в том, что наш диск D: был создан с помощью приложения под названием ImDisk . Утилита ImDisk, по-видимому, создает диск, который не соответствует некоторым условиям, которые проверяет fs.js, чтобы увидеть, может ли он взаимодействовать с каталогом. Мы перешли на использование aim_ll.exe из-за этого комментария к этой github проблеме, в которой многие люди сообщают о проблеме с ImDisk, но не так много информации о том, что ImDisk делает иначе, чем aim_ll.exe.

Обновлено: Недавно я хотел посмотреть, смогу ли я найти способ сделать проверку работоспособности / оповещение Nagios для проверки того, отсутствует ли на RAM-диске флаг, упомянутый в комментарии github. Я использовал fsutil fsInfo volumeInfo <drive name>, чтобы получить информацию об объеме для каждого диска, и заметил следующую разницу.

Установлен с помощью aim_ll

PS C:\scripts> fsutil fsInfo volumeInfo D:
Volume Name :
Volume Serial Number : 0x147ac565
Max Component Length : 255
File System Name : NTFS
Is ReadWrite
Not Thinly-Provisioned
Supports Case-sensitive filenames
Preserves Case of filenames
Supports Unicode in filenames
Preserves & Enforces ACL's
Supports file-based Compression
Supports Disk Quotas
Supports Sparse files
Supports Reparse Points
Returns Handle Close Result Information
Supports POSIX-style Unlink and Rename
Supports Object Identifiers
Supports Encrypted File System
Supports Named Streams
Supports Transactions
Supports Hard Links
Supports Extended Attributes
Supports Open By FileID
Supports USN Journal

Монтируется с imdisk

PS C:\scripts> fsutil fsInfo volumeInfo E:
Volume Name :
Volume Serial Number : 0xe82847c7
Max Component Length : 255
File System Name : NTFS
Is ReadWrite
Error:  Incorrect function.
Supports Case-sensitive filenames
Preserves Case of filenames
Supports Unicode in filenames
Preserves & Enforces ACL's
Supports file-based Compression
Supports Disk Quotas
Supports Sparse files
Supports Reparse Points
Returns Handle Close Result Information
Supports POSIX-style Unlink and Rename
Supports Object Identifiers
Supports Encrypted File System
Supports Named Streams
Supports Transactions
Supports Hard Links
Supports Extended Attributes
Supports Open By FileID
Supports USN Journal

Эта строка появляется на диске, сделанном imdisk Error: Incorrect function. Я не уверен, почему это было упущено при создании диска, но если вы ищете способ определить, будет ли диск работать с различными инструментами, то это, кажется, важная разница для тестирования.

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