我一直试图将一个简单的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
我试图在没有任何运气的情况下定位es5
和es2015
。
重现问题的步骤:
下载zip并将其解压缩到一个文件夹
cd lib
文件夹
运行npm install
或yarn install
以安装依赖项
运行npm run bundle
或yarn bundle
将库捆绑到
dist
cd demo
文件夹
运行npm install
或yarn install
运行npm install ../lib
或yarn add file:../lib
以安装位于ng-test-lib
文件夹
lib
运行npm start
或yarn start
以启动演示项目
我在这里添加了一些文件的内容:
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"
}
}
任何人都知道这里发生了什么?
答案 0 :(得分:1)
所以事实证明问题是符号链接文件夹意味着如果你使用npm install ../lib
问题就不会发生!我没有尝试过,因为我认为它与yarn add file:../lib
相同,但没有。
最后,这是一个与@angular/compiler
相关的问题,与symlink目录无法正常工作。
那就是它。
我希望这能帮助别人不要像我一样浪费时间。
<强>更新强> 请注意,如果您使用npm v5,则会发生此问题,因为它使用符号链接来链接本地软件包。