在node.js和Angular 2之间共享代码会破坏angular cli构建

时间:2017-03-25 15:49:29

标签: node.js angular typescript webpack

所以我们刚开始将后端应用程序解构为更小的模块,并使用angular/cli解决了这个问题。

我有几个npm模块,其中一个保存接口到我们的mongoose模型,我们称之为app/models

我们有一个回复用于后端,一个用于管理员,用Angular 2编写。当试图在2之间共享模型定义时,有关mongoose.model的角度抱怨不是函数。作为一个小例子,这就是我们放置文件的方式

backend
    api
        get_blog_posts.ts

angular2
    post-editor.ts

app/models
    index.ts
    /schemas
        blog_post.ts
    /models
        blog_posts.ts

/schemas/blog_posts.ts导出我们要在Angular 2 app

中使用的界面
export interface BlogPostSchema {...}

/models/blog_posts.ts导出BlogPostModel这是一个基本的mongoose模型,如下所示:

import {BlogPostSchema} from '../schemas/blog_post'

const Schema = new mongoose.Schema({...})
export const BlogPostModel = mongoose.model<BlogPostSchema>('BlogPost', Schema, 'blog_posts')

index.ts导出这两个:

export {BlogPostSchema} from './schemas/blog_posts'
export {BlogPostModel} from './models/blog_posts'

在Angular 2应用程序中,我们像这样使用BlogPostSchema

import {BlogPostSchema} from 'app/models' // app/models is installed as an npm module

@Component({...})
export class BlogPostEditorComponent {

    postItems: BlogPostSchema[];
}

在我们的后端应用程序上尝试相同的操作时,一切都运行正常,但是,在使用angular/cli构建的Angular 2中,我们收到错误:

TypeError: mongoose.model is not a function
at Object.Array.concat.Object.defineProperty.value (blog_post.ts?58c8*:70)
at __webpack_require__ (bootstrap b8ea1f1…:52)
at Object.Array.concat.Object.defineProperty.value (index.ts?adf0*:2)
at __webpack_require__ (bootstrap b8ea1f1…:52)
at Object.Array.concat.webpackEmptyContext.keys (index.ts?f9f5*:2)
at __webpack_require__ (bootstrap b8ea1f1…:52)
at Object.<anonymous> (index.ts:22)

我们不想在Angular 2应用中使用BlogPostModel,我们只需要接口BlogPostSchema

请注意,服务器和app/models模块是用TypeScript编写的。在编译模块时的设置中,这两个是 - 我认为 - 最重要的领域:

"compilerOptions": {
    "module": "commonjs",
    "target": "es5",
}

0 个答案:

没有答案