在Ionic和Angular应用程序之间共享代码

在Ionic和Angular应用程序之间共享代码,angular,ionic-framework,Angular,Ionic Framework,我有一个项目,我有多个Angular应用程序和一个ionic应用程序。我有许多类(模型)和服务,可以在所有应用程序之间共享 我的第一个想法是将共享文件放在各自独立的目录/文件夹中,并创建一个符号链接。我已尝试启动ionic应用程序,收到以下信息: 模块生成失败:错误: /home/norman/Work/vem共享/共享服务/table/table.service.ts 类型脚本编译中缺少。请确认它在里面 通过“文件”或“包含”属性配置您的tsconfig 在搜索此错误消息后,我遇到了,但是,这

我有一个项目,我有多个Angular应用程序和一个ionic应用程序。我有许多类(模型)和服务,可以在所有应用程序之间共享

我的第一个想法是将共享文件放在各自独立的目录/文件夹中,并创建一个符号链接。我已尝试启动ionic应用程序,收到以下信息:

模块生成失败:错误: /home/norman/Work/vem共享/共享服务/table/table.service.ts 类型脚本编译中缺少。请确认它在里面 通过“文件”或“包含”属性配置您的tsconfig

在搜索此错误消息后,我遇到了,但是,这是一个较低的角度版本(我使用的是angular 6和Ionic 4)。我还注意到一些关于符号链接在angular cli中不起作用的帖子,这似乎适用于旧版本

我想知道是否有人知道如何解决这个错误,以及符号链接是否在角度应用程序/离子应用程序中工作


感谢

Angular webapp通过添加
“preserveSymlinks”:对angular.json文件为true

angular.json

{ 
    "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
    "version": 1,
    "newProjectRoot": "projects",
    "projects": {
        "my-project": {
            "root": "",
            "sourceRoot": "src",
            "projectType": "application",
            "architect": {
                "build": {
                    "builder": "@angular-devkit/build-angular:browser",
                    "options": {
                       "outputPath": "target",
                       "index": "src/index.html",
                       "main": "src/main.ts",
                       "tsConfig": "src/tsconfig.app.json",
                       "polyfills": "src/showcase/polyfills.ts",
                       "preserveSymlinks": true,
...
"angularCompilerOptions": {
    "annotateForClosureCompiler": true,
    "skipTemplateCodegen": true,
    "strictMetadataEmit": true,
    "fullTemplateTypeCheck": true,
    "strictInjectionParameters": true,
    "enableResourceInlining": true,
    "preserveSymlinks": true   },
现在,如果您想创建带有保留符号链接的库,那么您必须在
tsconfig.lib.json
中添加相同的功能,因为对于库,您没有angular.json

tsconfig.lib.json

{ 
    "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
    "version": 1,
    "newProjectRoot": "projects",
    "projects": {
        "my-project": {
            "root": "",
            "sourceRoot": "src",
            "projectType": "application",
            "architect": {
                "build": {
                    "builder": "@angular-devkit/build-angular:browser",
                    "options": {
                       "outputPath": "target",
                       "index": "src/index.html",
                       "main": "src/main.ts",
                       "tsConfig": "src/tsconfig.app.json",
                       "polyfills": "src/showcase/polyfills.ts",
                       "preserveSymlinks": true,
...
"angularCompilerOptions": {
    "annotateForClosureCompiler": true,
    "skipTemplateCodegen": true,
    "strictMetadataEmit": true,
    "fullTemplateTypeCheck": true,
    "strictInjectionParameters": true,
    "enableResourceInlining": true,
    "preserveSymlinks": true   },
对于爱奥尼亚应用程序,符号链接问题是一个长期悬而未决的问题,解决方案似乎仍处于公开公关中。您可以跟踪问题


您可以使用可共享的服务/类创建Angular模块,并将其放到NPM上。然后在所有应用程序上安装模块并使用它。
您可以更新模块并不断更新所有应用程序代码库。

考虑到两者的结构,我认为这几乎是不可能的。你能分享一些代码或者@merlin你想分享什么样的模块吗?不确定这对你来说是否是一个可接受的解决方案,但是你考虑过使用Nrwl Nx monorepo吗?另外,你可以阅读这篇文章来分享(基于Ngrx)Angular7 web应用程序和Ionic4移动应用程序之间的逻辑您也可以阅读本文,在NPM上发布是不需要的。您也可以在package.json中使用本地文件引用:“@yourapp/yourmodule”:“file:dist/yourapp/yourmodule”,请记住,将此文件添加到package.json后,您需要运行npm i。使用npm可以非常有助于版本控制和更新。是的,这当然是可能的@NicoTimmerman