ng g app-shell input.mergeMap 不是函数

ng g app-shell input.mergeMap is not a function

我正在尝试使用最新的 angular cli 生成组件。我尝试生成一个模块,但我也遇到了类似的错误。

ng g component testComponent

我遇到了这个错误

input.mergeMap is not a function
TypeError: input.mergeMap is not a function
    at Object.callRule (C:\Users\dammy\Documents\Visual Studio 2017\Projects\Cars\node_modules\@angular-devkit\schematics\src\rules\call.js:70:18)

我的 Package.json 文件如下所示:

{
 ...
  },
  "dependencies": {
    ...
    "css-loader": "0.28.4",
    "es6-shim": "0.35.3",
    "event-source-polyfill": "0.0.9",
    "expose-loader": "0.7.3",
    "extract-text-webpack-plugin": "2.1.2",
    "file-loader": "0.11.2",
    "html-loader": "0.4.5",
    "isomorphic-fetch": "2.2.1",
    "jquery": "3.2.1",
    "json-loader": "0.5.4",
    "preboot": "4.5.2",
    "raw-loader": "0.5.1",
    "reflect-metadata": "0.1.10",
    "rxjs": "5.5.5",
    "style-loader": "0.18.2",
    "to-string-loader": "1.1.5",
    "typescript": "2.4.1",
    "url-loader": "0.5.9",
    "webpack": "2.5.1",
    "webpack-hot-middleware": "2.18.2",
    "webpack-merge": "4.1.0",
    "zone.js": "0.8.12"
  },

我已经安装:Angular/cli@1.6.0

看起来 @angular/cli 的那个版本有一个 rxjs 依赖 v5.5.5

查看此依赖关系树:

yarn list rxjs
yarn list v0.27.5
├─ @angular-devkit/schematics@0.0.41
│  └─ rxjs@5.5.5
├─ @angular/cli@1.6.0
│  └─ rxjs@5.5.5
└─ rxjs@5.5.2
Done in 1.16s.

在我的例子中,版本是 5.5.2,升级解决了这个问题。

有同样的问题;我已经通过再次删除 node_modules 和 运行 yarn install 暂时恢复到 @angular/cli 的 v1.5.0。

将@angular/cli 升级到版本 1.6.0 会引入此问题,因为 @angular-devkit/schematics@0.0.41(需要 rxjs@5.5.5)和 @angular/cli 的依赖项不匹配@1.6.0。

编辑: 请注意,在 package.json 中将 rxjs 的版本设置为 5.5.5 不会升级 @angular-devkit/schematics@0.0 的代码依赖项.41 或@angular/cli@1.6.0,如下面的摘录所示。

参考:[https://github.com/angular/angular-cli/issues/8782][1]

受影响的命令: ng generate XXX

@angular/cli 和@angular-devkit/schematics 的依赖项似乎在将@angular/cli 升级到 v1.6.0 后没有升级,特别是 rxjs 没有升级。

├─ @angular-devkit/schematics@0.0.41
│  ├─ @angular-devkit/core@0.0.22
│  ├─ @ngtools/json-schema@^1.1.0
│  ├─ @schematics/schematics@0.0.10
│  ├─ minimist@^1.2.0
│  ├─ rxjs@^5.5.2
│  ├─ rxjs@5.5.2
│  │  └─ symbol-observable@^1.0.1
│  └─ symbol-observable@1.0.4
├─ @angular/animations@5.0.2
│  └─ tslib@^1.7.1
├─ @angular/cli@1.6.0
│  ├─ @angular-devkit/build-optimizer@~0.0.35
│  ├─ @angular-devkit/schematics@~0.0.40
│  ├─ @ngtools/json-schema@1.1.0
│  ├─ @ngtools/webpack@1.9.0
│  ├─ @schematics/angular@~0.1.10
│  ├─ autoprefixer@^6.5.3
│  ├─ chalk@~2.2.0
│  ├─ chalk@2.2.2
│  │  ├─ ansi-styles@^3.1.0
│  │  ├─ escape-string-regexp@^1.0.5
│  │  └─ supports-color@^4.0.0
│  ├─ circular-dependency-plugin@^4.2.1
│  ├─ common-tags@^1.3.1
│  ├─ copy-webpack-plugin@^4.1.1
│  ├─ core-object@^3.1.0
│  ├─ css-loader@^0.28.1
│  ├─ cssnano@^3.10.0
│  ├─ denodeify@^1.2.1
│  ├─ ember-cli-string-utils@^1.0.0
│  ├─ exports-loader@^0.6.3
│  ├─ extract-text-webpack-plugin@^3.0.2
│  ├─ file-loader@^1.1.5
│  ├─ fs-extra@^4.0.0
│  ├─ glob@^7.0.3
│  ├─ html-webpack-plugin@^2.29.0
│  ├─ istanbul-instrumenter-loader@^2.0.0
│  ├─ karma-source-map-support@^1.2.0
│  ├─ less-loader@^4.0.5
│  ├─ less@^2.7.2
│  ├─ license-webpack-plugin@^1.0.0
│  ├─ lodash@^4.11.1
│  ├─ memory-fs@^0.4.1
│  ├─ minimatch@^3.0.4
│  ├─ node-modules-path@^1.0.0
│  ├─ node-sass@^4.3.0
│  ├─ nopt@^4.0.1
│  ├─ opn@~5.1.0
│  ├─ portfinder@~1.0.12
│  ├─ postcss-custom-properties@^6.1.0
│  ├─ postcss-loader@^2.0.8
│  ├─ postcss-url@^7.1.2
│  ├─ raw-loader@^0.5.1
│  ├─ resolve@^1.1.7
│  ├─ rxjs@^5.5.2
│  ├─ rxjs@5.5.2
│  │  └─ symbol-observable@^1.0.1

我在升级到 @angular/cli 1.6.0 时遇到了同样的问题,即使我有 rxjs v5.5.5。我能够通过执行以下操作解决它:

npm i --save-dev @angular/cli@^1.6.0

npm i @angular/cli@^1.6.0 -g

npm i --save-dev typescript@^2.6.2

npm i typescript@^2.6.2 -g

就我而言,这很可能是由于我的全局打字稿与本地打字稿的版本不同所致。我刚刚重新安装了所有以确保一切都同步 [显然,您可以组合其中的一些命令,为了清楚起见,我只是这样发布的]。

更新:出于某种原因,我遇到了这个问题 return,但这次上述解决方案无法单独使用。尝试上述操作后,我能够通过删除我的 package-lock.json 和本地 node_modules 文件夹并执行另一个 npm install.

来解决它
It seems that if you have @angular/cli installed globally and a different 
version installed locally it gets broken. I solved the same error removing the 
cli package that was installed locally with 

npm remove @angular/cli --save 

then install your CLI->

npm install -g @angular/cli@latest 

对我来说,我重新安装了 angular-devkit。 运行 命令:

npm install @angular-devkit/schematics@0.0.34 --save-dev

成功了!

升级到@angular/cli 1.6.3 和 typescript 2.6.2 后,我遇到了同样的问题。您必须检查@angular/cli 和 Typescript 的全局版本和本地版本是否相同。

您可以使用以下命令查看全球版本:

ng -v
tsc -v

然后与本地package.json进行比较。

如果不同:

全球

npm remove -g @angular/cli
npm remove -g typescript

npm i -g @angular/cli@latest
npm i -g typescript@latest

本地:

//Remove node_modules folder
//remove package-lock.json
npm i @angular/cli@latest --save-dev
npm i typescript@latest --save-dev
npm install

注意: 在撰写本文时,我收到来自 angular cli 的警告,通知我

@angular/compiler-cli@5.2.0 requires typescript@'>=2.4.2 <2.6.0' but 2.6.2 was found instead.  

如果你想避免这种情况。您可以使用

npm i -g typescript@2.4.2
npm i typescript@2.4.2 --save-dev