0

我一直在尝试导出一个简单的 Angular4 模块以在另一个项目中工作至少一个月。阅读了很多文章,但它不起作用。这是一个包含两个文件夹的文件

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

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

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

错误中的错误遇到静态解析符号值。不支持函数调用。考虑将函数或 lambda 替换为对导出函数的引用(原始 .ts 文件中的位置 194:50),解析符号 NgModule

我试图瞄准es5es2015但没有任何运气。

重现问题的步骤:

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

  2. 光盘lib文件夹

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

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

  5. 光盘demo文件夹

  6. 运行npm installyarn install

  7. 运行npm install ../lib或安装文件夹内yarn add file:../lib的本地ng-test-liblib

  8. 运行npm startyarn start启动演示项目

更新:

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

lib/src/a-module.ts

import { NgModule } from '@angular/core';
import { ADirective } from './a-directive';

@NgModule({
    declarations: [
        ADirective,
    ],
    exports: [
        ADirective,
    ]
})
export class AModule {}

lib/src/a-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"
    }
}

有人知道这里发生了什么吗?

4

1 回答 1

1

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

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

而已。

我希望这可以帮助其他人不要像我一样浪费时间。

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

于 2017-07-18T00:40:37.537 回答