AOT角度模块

时间:2017-07-17 23:30:33

标签: angular angular-module angular-aot

我一直试图将一个简单的Angular4模块导出到另一个项目中工作至少一个月。阅读了很多文章,但它没有用。 这里a file containing two folders

lib -> Containing a simple Angular4 module
demo -> Containing a simple AngularCli project

lib是Angular模块的一个非常简单的实现,demo正在其根模块中导入该模块。

无论我做什么,演示应用程序都会给出不同类型的错误,说明lib不是Angular模块。 有时谈论不包括装饰器,有时这个错误:

  

ERROR in Error遇到静态解析符号值。   不支持函数调用。考虑更换功能或   lambda引用导出的函数(位置194:50 in   原始.ts文件),解析符号NgModule

我试图在没有任何运气的情况下定位es5es2015

重现问题的步骤:

  1. 下载zip并将其解压缩到一个文件夹

  2. cd lib文件夹

  3. 运行npm installyarn install以安装依赖项

  4. 运行npm run bundleyarn bundle将库捆绑到 dist

  5. cd demo文件夹

  6. 运行npm installyarn install

  7. 运行npm install ../libyarn add file:../lib以安装位于ng-test-lib文件夹

  8. 内的本地lib
  9. 运行npm startyarn start以启动演示项目

  10. 更新

    我在这里添加了一些文件的内容:

    LIB / SRC /α-module.ts

    import { NgModule } from '@angular/core';
    import { ADirective } from './a-directive';
    
    @NgModule({
        declarations: [
            ADirective,
        ],
        exports: [
            ADirective,
        ]
    })
    export class AModule {}
    

    LIB / SRC /α-directive.ts

    import {
        Input,
        OnInit,
        Directive,
     } from '@angular/core';
    
    @Directive({
        selector: '[aDir]',
    })
    export class ADirective implements OnInit {
        @Input() test: string;
    
        ngOnInit() {
            console.log(`I'm the directive, and this is test value: ${this.test}`);
        }
    }
    

    LIB / tsconfig.aot.json

    {
        "compilerOptions": {
            "sourceMap": true,
            "inlineSources": true,
            "declaration": true,
            "noImplicitAny": false,
            "skipLibCheck": true,
            "stripInternal": true,
            "emitDecoratorMetadata": true,
            "experimentalDecorators": true,
            "suppressImplicitAnyIndexErrors": true,
            "module": "es2015",
            "target": "es5",
            "moduleResolution": "node",
            "lib": [
                "es2015",
                "dom"
            ],
            "outDir": "./dist",
            "rootDir": "./src",
            "baseUrl": ".",
            "types": []
        },
        "files": [
            "./src/a-module.ts"
        ],
        "angularCompilerOptions": {
            "strictMetadataEmit": true,
            "skipTemplateCodegen": true,
            "annotateForClosureCompiler": true,
            "flatModuleOutFile": "index.js",
            "flatModuleId": "index",
            "genDir": "./dist"
        }
    }
    

    任何人都知道这里发生了什么?

1 个答案:

答案 0 :(得分:1)

所以事实证明问题是符号链接文件夹意味着如果你使用npm install ../lib问题就不会发生!我没有尝试过,因为我认为它与yarn add file:../lib相同,但没有。

最后,这是一个与@angular/compiler相关的问题,与symlink目录无法正常工作。

那就是它。

我希望这能帮助别人不要像我一样浪费时间。

<强>更新 请注意,如果您使用npm v5,则会发生此问题,因为它使用符号链接来链接本地软件包。