Мы работаем над новым угловым ионным приложением, и оно строится на всех наших машинах из 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
Мы используем следующие версии различных программ
Я не очень хорошо знаком с созданием угловых приложений, поэтому, если вам нужна другая информация, сообщите мне, и я могу ее предоставить.
{
"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, так что, надеюсь, другие найдут это решение быстрее, чем я, в будущем.
@ShinichiKudo Я добавил наш package.json
, когда я получаю исходный код с p4, у нас нет node_mobules
, и он не будет, даже когда я бегу npm install
. Если я потом возьму те же файлы, которые вытащены из p4, и соберу их из командной строки вместо teamcity, все будет нормально. Команды точно такие же, как и в teamcity и powershell, и я сделал это с тем же пользователем.
Вы пытались обновить версию Node? Например, используя v12, чтобы увидеть, есть ли у вас такая же ошибка? Также попробуйте классику Invalidate Cache/Restart
@ShinichiKudo Я не пытался обновить версию узла, но я подтвердил, что версия узла одинакова на компьютере сборки и на моем локальном компьютере. Мы пытались аннулировать кеш, но это не дало никакого эффекта.
@ShinichiKudo Просто хотел пропинговать вас, потому что вы очень помогли мне начать определение проблемы, и я подумал, что вы можете найти решение проблемы интересным. Спасибо за вашу помощь.
Рад, что вы решили свою проблему, исходная проблема
Создайте сценарий сборки также, если вы создаете ионный запуск, эти команды также входят в систему для сборки сервер и собрать вручную там же
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.
Я не уверен, почему это было упущено при создании диска, но если вы ищете способ определить, будет ли диск работать с различными инструментами, то это, кажется, важная разница для тестирования.
Первым делом удалите папку
node_modules
и запуститеnpm install
Затем, если вы используете Ionic, соберите с помощью этой команды:ionic build
Если у вас все еще есть проблемы, добавьте свой package.json в тему