【问题标题】:Building ionic angular app fails when built from teamcity but succeeds every where else从teamcity构建离子角度应用程序失败,但在其他任何地方都成功
【发布时间】:2021-03-21 09:00:17
【问题描述】:

我们正在开发一个新的 angular ionic 应用程序,它可以在我们所有的 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

我们正在使用以下版本的各种软件

  • Npm:6.9.0
  • Angular CLI:1.6.7
  • 节点:10.16.0

我对构建 Angular 应用程序不是很熟悉,所以如果您需要我提供其他信息,请告诉我,我可以提供。

{
   "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 如果您仍有问题,请添加您的包。 json 上的主题
  • @ShinichiKudo 我添加了我们的package.json,当我从 p4 获取源时我们没有node_mobules,即使我运行npm install 也不会。如果我然后从 p4 中提取相同的文件并从命令行而不是 teamcity 构建它就可以了。这些命令与从 teamcity 和 powershell 运行的命令完全相同,我也使用相同的用户完成了此操作。
  • 您是否尝试升级 Node 版本?例如使用 v12,看看你是否得到同样的错误?也可以试试经典的Invalidate Cache/Restart
  • @ShinichiKudo 我没有尝试升级节点版本,但我已经确认节点版本在构建机器和我的本地机器上是相同的。我们确实尝试过使缓存无效,但没有效果。
  • @ShinichiKudo 只是想联系您,因为您在帮助我开始确定问题方面非常有帮助,而且我认为您可能会发现问题的解决方案很有趣。感谢您的帮助。

标签: angular ionic-framework teamcity ramdisk


【解决方案1】:

如果您构建离子运行这些命令也创建构建脚本也登录构建 服务器和手动构建相同的地方

Ionic cordova platform add android/ios
ionic cordova build ios/android --prod --release

【讨论】:

    【解决方案2】:

    我们终于能够通过调试到 fs.js 中找到问题所在,我们会收到以下错误。此错误是在较低级别捕获的,我们只在我的问题中得到了错误,而没有调试到 fs.js。

    EISDIR: illegal operation on a directory
    

    我们遇到的问题是因为我们的 D: 驱动器是使用名为 ImDisk 的应用程序制作的。 ImDisk 实用程序显然会生成一个与 fs.js 检查是否可以与目录交互的某些条件不匹配的驱动器。我们改用 aim_ll.exe,因为这个 github 上的 comment issue 有很多人报告了 ImDisk 的问题,但没有太多关于 ImDisk 的不同之处的信息与 aim_ll.exe。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-19
      • 2016-01-27
      • 1970-01-01
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      相关资源
      最近更新 更多