我想编写自己的库并在其他项目中重用,所以我创建了一个新应用并在其中生成了一个库:
ng new lib-collection
cd lib-collection
ng g library first-lib --prefix va
如何将Angular Material添加到我的库中?我想使用这样的东西:
ng add @angular/material --project=first-lib
但是我收到一个错误:Could not find the project main file inside of the workspace config (projects/first-lib/src)
。怎么了?
答案 0 :(得分:7)
您不需要在此添加它。
您需要将其添加到主应用程序中:
ng add @angular/material
然后将“ @ angular / material”添加到peerDependencies
的{{1}}中(只需从主projects/first-lib/src/package.json
复制带有@angular/material
的行)。
您刚刚做了什么:
package.json
上,现在可以在本地运行代码,因为本地的cli cli将使用主package.json
和package.json
node_modules
(作为npm警告)您当然也可以将其添加到peerDependencies
而不是dependencies
中,并自动将其安装在您的库中,但这不是管理前端依赖项的好方法(但仍然可以适用于纯node.js包)
答案 1 :(得分:3)
由于ng7和ng CLI 7的存在,我们可以遵循的Angular Library开发的首选方法如下。
--create-application
标志设置为false。/dist/
文件夹扩展到一个单独的存储库中,您可以将其用作分发新库的源(内部或通过npm公开发布等)。这可以做一些事情。 1.使您的库和沙箱项目保持独立,并在工作区中生成一个端到端(e2e)测试项目。 2.将所有项目保持在一起,但相互独立。
那么这到底有什么变化?这主要是我们做事的方式。
请记住,您需要将外部原理图/库添加到沙箱项目中,而不是添加到工作区中。在ng6中,我认为并非如此,因为ng6中,您同时创建了一个工作区和一个项目,然后不得不做一些重命名的工作。使用ng7时,您可以将--create-application
标志设置为false
,然后创建沙箱/开发项目。就是说,当您使用ng add
来向沙盒项目中添加外部库/示意图(如棱角材质)时,您将在--project=
命令中使用ng add
标志。现在,我们已经完成了以上的所有步骤。
注意:我总是在原始位置(gitlab / github / bitbucket / etc)创建我的存储库,然后在执行任何操作之前将其克隆到本地,
出于演示目的,我们将此库称为“演示库”,而我的存储库将命名为“ demo-workspace”
git clone $ssh_url_for_repo_here
cd demo-workspace
ng new demo-workspace --directory=./ --create-application=false
中创建工作空间
ng serve
ng generate demo-library
或ng g demo-library --prefix=demo
生成包含所需前缀的库。
ng build demo-library
以运行新库的初始构建,这将在工作区的根目录中创建一个dist
文件夹。ng generate
命令和所需的标志(例如,ng g application demo-sandbox --style=scss --routing=false
)开发和测试角度库时使用
demo-workspace/projects/demo-sandbox
中ng serve
进行服务,它将显示在端口4200上,无需为此添加--project=
标志,它将假定为正确地。 ng add
命令并使用--project=
标志将Angular Material原理图添加到您的沙箱项目中,以标识Angular Material应该在哪个项目中运行(同样,所有这些都在您的父级中工作区目录)ng add @angular/material --project=demo-sandbox
然后将“ @ angular / material”添加到“ projects / demo-library / src / package.json”的peerDependencies中(只需从主package.json中复制一条带有@ angular / material的行)。
我个人添加@ angular / cdk,@ angular / animations和Hammerjs依赖项以及@ angular / material。我对显式性很重视,另外您还会注意到,在“ peerDependencies”中,它显式地同时具有@ angular / common和@ angular / core,而不仅仅是一个并假设另一个。
ng build
命令来重建演示库项目,从而在工作区项目中创建一个新的“ dist /”文件夹,这也将触发当前的服务'demo-sandbox'项目来重建自身。