35

我将我的angular 8.x.x项目迁移到angular 9.x.x并且当我尝试发布我的库时,它失败并出现以下错误

npm 错误!@candiman/website@9.0.0 prepublishOnly:node --eval "console.error('ERROR: Trying to publish a package that has been compiled by Ivy. This is not allowed.\nPlease delete and rebuild the package, without compiling with Ivy, before attempting to publish.\n')" && exit 1

有什么改变吗angular 9

4

8 回答 8

59

更新角度 12

--configuration production在构建库时使用该选项解决了我的问题

ng build --configuration production

原答案:

--prod在构建库时使用选项解决了我的问题

ng build yourLibraryName --prod
于 2020-02-14T22:01:47.827 回答
16

根据官方 Angular 文档https://angular.io/guide/ivy#opting-out-of-ivy-in-version-9

在构建和发布库时,最好通过添加以下行从 Ivy 编译器中选择退出以使用较旧的 View Engine:

enableIvy: false

到库根目录下的 tsconfig.json 文件中的 angularCompilerOptions ,如下所示;

在此处输入图像描述

在将我的 Angular 库更新到 Angular 版本 9 后,我已经尝试过,这个小改动就像一个魅力。

于 2020-04-30T15:51:15.857 回答
9

修复 Angular 12+ 缺少组件样式问题

在 Angular 12 上,使用时:

ng build --configuration production

确实为我解决了原来的问题,它还引入了一个新问题:我的库组件的样式完全丢失了。

我通过替换解决了这个其他问题:

  "angularCompilerOptions": {
    "enableIvy": false
  }

和:

  "angularCompilerOptions": {
    "compilationMode": "partial"
  }

projects/my-library/tsconfig.lib.prod.json

来源:https ://angular.io/guide/creating-libraries#building-libraries-with-ivy

于 2021-06-30T15:42:42.703 回答
6

就我而言,上述解决方案均无效。然而,我注意到在package.json我的库中 dist 文件夹中有一个新添加的脚本(可能是因为这个而添加的):


  "scripts": {
    "prepublishOnly": "node --eval \"console.error('ERROR: Trying to publish a package that has been compiled by NGCC. This is not allowed.\\nPlease delete and rebuild the package, without compiling with NGCC, before attempting to publish.\\nNote that NGCC may have been run by importing this package into another project that is being built with Ivy enabled.\\n')\" && exit 1"
  }

所以这里要么删除/替换prepublishOnly脚本,要么使用发布npm publish --ignore-scripts

于 2020-10-15T23:35:20.827 回答
5

ng build --prod在使用and enableIvy = falsein构建我的库时,我的工作区中添加了与Melchiatsconfig.lib.json相同的“prepublishOnly”脚本。package.json

原因似乎与publishConfig/registry在每个库中使用私有存储库有关package.json,如https://github.com/angular/angular/issues/37973#issuecomment-656136865中所述

在构建用于发布的 Angular 库时,使用ng build --prod,enableIvy = false在库中tsconfig.json,如果使用私有存储库,npm publish --ignore-scripts

于 2021-02-26T10:15:12.860 回答
2

除了添加--prod标志之外,如果您运行的是非常旧的版本,您还需要以下更新angular.json

    "myproject": {
      ...
      "architect": {
        "build": {
          ...
          "configurations": {
            "production": {
              "tsConfig": "projects/mypath/tsconfig.lib.prod.json"
            }
          }
        },

该文件的内容为:

{
  "extends": "./tsconfig.lib.json",
  "angularCompilerOptions": {
    "enableIvy": false
  }
}

如果您仍然有以下几行,您可以检查您是否使用的是旧版本angular.json

            "production": {
              "project": "projects/tsmean/spinner/ng-package.prod.json"
            }
于 2021-04-20T10:36:58.147 回答
1

添加

“编译模式”:“部分”

“角编译器选项”:{

}

解决了我的问题

于 2021-08-05T09:54:10.773 回答
0

在您的angular.json文件build中,您的库树中有一个对象。在里面build,你有一个configurations对象,它包含一个production对象,也可能包含一个对象development

内部build对象定义一个名为 的新属性defaultConfiguration,并设置值:与对象内部属性production的名称匹配。productionconfigurations

您的angular.json文件应如下所示:

"architect": {
  build": {
    "builder": "@angular-devkit/build-ng-packagr:build",
    "options": {
      "tsConfig": "projects/ngx-custom-tooltip/tsconfig.lib.json",
      "project": "projects/ngx-custom-tooltip/ng-package.json"
    },
    "configurations": {
      "production": {
        "tsConfig": "projects/ngx-custom-tooltip/tsconfig.lib.prod.json"
      },
      "development": {
        "tsConfig": "projects/ngx-custom-tooltip/tsconfig.lib.json"
      }
    },
    "defaultConfiguration": "production"
  },
  ...
}

tsconfig.lib.prod.json应该包含这个对象:

"angularCompilerOptions": {
  "enableIvy": false
}

最后,哟可以执行ng build your-library-name

于 2021-08-22T03:15:05.847 回答