nrwl / nx

Smart Monorepos · Fast CI
https://nx.dev
MIT License
23.27k stars 2.32k forks source link

Converting existing Angular CLI project fails when asset is not a simple string #682

Closed samuel-girard closed 5 years ago

samuel-girard commented 6 years ago

Hello, When converting an existing project where the config contains assets not as a string but as an object, it fails with the message asset.startsWith is not a function:

Installing packages for tooling via npm.
    Renamed src/karma.conf.js -> apps/test-migration/karma.conf.js
    Renamed src/tsconfig.app.json -> apps/test-migration/tsconfig.app.json
    Renamed src/tsconfig.spec.json -> apps/test-migration/tsconfig.spec.json
    Renamed src/tslint.json -> apps/test-migration/tslint.json
    Renamed src -> apps/test-migration/src
    Renamed e2e/ -> apps/test-migration-e2e
asset.startsWith is not a function

An example of project file (angular.json) that fails:

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "newProjectRoot": "projects",
  "projects": {
    "test-migration": {
      "root": "",
      "sourceRoot": "src",
      "projectType": "application",
      "prefix": "app",
      "schematics": {},
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "dist/test-migration",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "src/tsconfig.app.json",
            "assets": [
              "src/favicon.ico",
              "src/assets",
              {
                "glob": "**/*",
                "input": "node_modules/ol-cesium/dist/node_modules/@camptocamp/cesium/Build/Cesium",
                "output": "/assets/cesium"
              }
            ],
            "styles": [
              "src/styles.css"
            ],
            "scripts": []
          },
          "configurations": {
            "production": {
              "fileReplacements": [
                {
                  "replace": "src/environments/environment.ts",
                  "with": "src/environments/environment.prod.ts"
                }
              ],
              "optimization": true,
              "outputHashing": "all",
              "sourceMap": false,
              "extractCss": true,
              "namedChunks": false,
              "aot": true,
              "extractLicenses": true,
              "vendorChunk": false,
              "buildOptimizer": true
            }
          }
        },
        "serve": {
          "builder": "@angular-devkit/build-angular:dev-server",
          "options": {
            "browserTarget": "test-migration:build"
          },
          "configurations": {
            "production": {
              "browserTarget": "test-migration:build:production"
            }
          }
        },
        "extract-i18n": {
          "builder": "@angular-devkit/build-angular:extract-i18n",
          "options": {
            "browserTarget": "test-migration:build"
          }
        },
        "test": {
          "builder": "@angular-devkit/build-angular:karma",
          "options": {
            "main": "src/test.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "src/tsconfig.spec.json",
            "karmaConfig": "src/karma.conf.js",
            "styles": [
              "src/styles.css"
            ],
            "scripts": [],
            "assets": [
              "src/favicon.ico",
              "src/assets"
            ]
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": [
              "src/tsconfig.app.json",
              "src/tsconfig.spec.json"
            ],
            "exclude": [
              "**/node_modules/**"
            ]
          }
        }
      }
    },
    "test-migration-e2e": {
      "root": "e2e/",
      "projectType": "application",
      "architect": {
        "e2e": {
          "builder": "@angular-devkit/build-angular:protractor",
          "options": {
            "protractorConfig": "e2e/protractor.conf.js",
            "devServerTarget": "test-migration:serve"
          },
          "configurations": {
            "production": {
              "devServerTarget": "test-migration:serve:production"
            }
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": "e2e/tsconfig.e2e.json",
            "exclude": [
              "**/node_modules/**"
            ]
          }
        }
      }
    }
  },
  "defaultProject": "test-migration"
}

This file is taken from a newly created Angular application, with only the new asset added.

This can be easily reproduced by creating a new project:

ng new test-migration
cd test-migration

then edit angular.json file to add this asset in the build section:

{
  "glob": "**/*",
  "input": "node_modules/ol-cesium/dist/node_modules/@camptocamp/cesium/Build/Cesium",
  "output": "/assets/cesium"
 }

then migrate the project to Nx:

ng add @nrwl/schematics

Voilà

tilowestermann commented 6 years ago

This issue still exists with @nrwl/schematics@6.2.1

rokerkony commented 6 years ago

hey, we have the same problem... if it would help here is our angular.json file:

{
    "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
    "version": 1,
    "newProjectRoot": "projects",
    "projects": {
        "frontend-som": {
            "root": "",
            "sourceRoot": "src",
            "projectType": "application",
            "prefix": "app",
            "schematics": {
                "@schematics/angular:component": {
                    "styleext": "scss"
                }
            },
            "architect": {
                "build": {
                    "builder": "@angular-devkit/build-angular:browser",
                    "options": {
                        "outputPath": "dist/frontend-som",
                        "index": "src/index.html",
                        "main": "src/main.ts",
                        "polyfills": "src/polyfills.ts",
                        "tsConfig": "src/tsconfig.app.json",
                        "assets": [
                            "src/manifest.json",
                            "src/assets",
                            "src/generated",
                            {
                                "glob": "**/*",
                                "input": "node_modules/frontend-icons/dist/fonts/",
                                "output": "/assets/fonts/"
                            },
                            {
                                "glob": "bugsnag.min.*",
                                "input": "node_modules/bugsnag-js/dist/",
                                "output": "/assets/js/"
                            }
                        ],
                        "styles": [
                            "src/styles.scss"
                        ],
                        "scripts": [
                            "node_modules/humanize-duration/humanize-duration.js",
                            "node_modules/mixpanel-browser/build/mixpanel.umd.js",
                            "node_modules/sendbird/SendBird.min.js"
                        ]
                    },
                    "configurations": {
                        "production": {
                            "fileReplacements": [
                                {
                                    "replace": "src/environments/environment.ts",
                                    "with": "src/environments/environment.prod.ts"
                                }
                            ],
                            "deployUrl": "/static/frontend-som/",
                            "optimization": true,
                            "outputHashing": "all",
                            "sourceMap": true,
                            "extractCss": true,
                            "namedChunks": true,
                            "aot": true,
                            "extractLicenses": true,
                            "vendorChunk": false,
                            "buildOptimizer": true
                        }
                    }
                },
                "serve": {
                    "builder": "@angular-devkit/build-angular:dev-server",
                    "options": {
                        "browserTarget": "frontend-som:build",
                        "proxyConfig": "proxy.config.js"
                    },
                    "configurations": {
                        "production": {
                            "browserTarget": "frontend-som:build:production"
                        }
                    }
                },
                "extract-i18n": {
                    "builder": "@angular-devkit/build-angular:extract-i18n",
                    "options": {
                        "browserTarget": "frontend-som:build"
                    }
                },
                "test": {
                    "builder": "@angular-devkit/build-angular:karma",
                    "options": {
                        "main": "src/test.ts",
                        "polyfills": "src/polyfills.ts",
                        "tsConfig": "src/tsconfig.spec.json",
                        "karmaConfig": "src/karma.conf.js",
                        "styles": [
                            "styles.scss"
                        ],
                        "scripts": [
                            "node_modules/humanize-duration/humanize-duration.js",
                            "node_modules/mixpanel-browser/build/mixpanel.umd.js",
                            "node_modules/sendbird/SendBird.min.js"
                        ],
                        "assets": [
                            "src/assets",
                            {
                                "glob": "**/*",
                                "input": "node_modules/frontend-icons/dist/fonts/",
                                "output": "/assets/fonts/"
                            }
                        ]
                    },
                    "configurations": {
                        "test": {
                            "fileReplacements": [
                                {
                                    "replace": "src/environments/environment.ts",
                                    "with": "src/environments/environment.test.ts"
                                }
                            ],
                            "sourceMap": false,
                            "watch": true
                        },
                        "test-ci": {
                            "fileReplacements": [
                                {
                                    "replace": "src/environments/environment.ts",
                                    "with": "src/environments/environment.test.ts"
                                }
                            ],
                            "karmaConfig": "src/karma-ci.conf.js",
                            "sourceMap": false,
                            "watch": false
                        }
                    }
                },
                "lint": {
                    "builder": "@angular-devkit/build-angular:tslint",
                    "options": {
                        "format": "stylish",
                        "tsConfig": [
                            "src/tsconfig.app.json",
                            "src/tsconfig.spec.json"
                        ],
                        "exclude": [
                            "**/node_modules/**"
                        ]
                    }
                }
            }
        },
        "frontend-som-e2e": {
            "root": "e2e/",
            "projectType": "application",
            "architect": {
                "e2e": {
                    "builder": "@angular-devkit/build-angular:protractor",
                    "options": {
                        "devServerTarget": "",
                        "protractorConfig": "e2e/protractor.conf.js",
                        "port": 4200,
                        "webdriverUpdate": false
                    },
                    "configurations": {
                        "e2e-ci": {
                            "devServerTarget": "frontend-som:serve",
                            "port": 28891,
                            "protractorConfig": "e2e/protractor-chrome-headless.conf.js"
                        }
                    }
                },
                "lint": {
                    "builder": "@angular-devkit/build-angular:tslint",
                    "options": {
                        "format": "stylish",
                        "tsConfig": "e2e/tsconfig.e2e.json",
                        "exclude": [
                            "**/node_modules/**"
                        ]
                    }
                }
            }
        }
    },
    "defaultProject": "frontend-som"
}

and output from ng add @nrwl/schematics:

Installed packages for tooling via npm.
    Renamed src/karma.conf.js -> apps/frontend-som/karma.conf.js
    Renamed src/tsconfig.app.json -> apps/frontend-som/tsconfig.app.json
    Renamed src/tsconfig.spec.json -> apps/frontend-som/tsconfig.spec.json
    Path: src/tslint.json does not exist
    Renamed src -> apps/frontend-som/src
    Renamed e2e/ -> apps/frontend-som-e2e
asset.startsWith is not a function
brunobertechini commented 6 years ago

Still exists in 6.3.0

github-actions[bot] commented 1 year ago

This issue has been closed for more than 30 days. If this issue is still occuring, please open a new issue with more recent context.