Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正确写入和导入自定义节点模块 编辑_Javascript_Node.js_Typescript_Node Modules - Fatal编程技术网

Javascript 正确写入和导入自定义节点模块 编辑

Javascript 正确写入和导入自定义节点模块 编辑,javascript,node.js,typescript,node-modules,Javascript,Node.js,Typescript,Node Modules,这不是一个打字问题,而是一个最佳实践问题。TypeScript中的示例,但实际上,这里的问题是如何正确地公开组成模块的多个文件中的多个导出,以及如何正确地导入它们 编辑2 还是有些不对劲 在Module2的索引中,我有: export * from "./queryFilter"; 在Module1 user.ts上,我使用 import { queryFilter as QueryFilter } from "Module2"; (...) var User = {...} User.ge

这不是一个打字问题,而是一个最佳实践问题。TypeScript中的示例,但实际上,这里的问题是如何正确地公开组成模块的多个文件中的多个导出,以及如何正确地导入它们


编辑2 还是有些不对劲

在Module2的索引中,我有:

export * from "./queryFilter";
在Module1 user.ts上,我使用

import { queryFilter as QueryFilter } from "Module2";
(...)
var User = {...}
User.getById = (userId: string) => {
...
}
export { User }
以及我的Module1的index.ts,我将其导出为
从“/model/user”导出*

然后,在我的主项目中,我使用

import * as Schema from "Module1";
var User = Schema.User;
但是,每当我尝试调用User.getById时,都会抛出一个错误:
调试:内部、实现、错误
TypeError:未捕获错误:无法读取未定义的属性“getByEmail”

从这个方法来看,我做错了什么


我第一次写了两个节点模块,我确实有一些关于正确声明/使用它的问题

因此,我正在创建一个需要另一个自定义模块的模块,我们将它们称为Module1和Module2

因此,主应用程序需要模块1,但模块1也需要模块2

现在在模块2上,我有一堆文件,在每一个文件上,我导出我需要的东西。以下是一个示例:

模块2-Utils.ts:

"use strict"
const RandomString = require("randomstring");

let randomString = (numCharacters: number) => {
    return RandomString.generate({
        length: numCharacters,
        capitalization: 'uppercase',
        charset: 'alphanumeric'
    });
}

module.exports.randomString = randomString;
模块2-queryFilter.ts:

"use strict"

export default class QueryFilter {
    name: string;
    op: string;
    value: any;
    scope: string;

    constructor(name: string, op: string, value: any, scope: string) {
        this.name = name;
        this.op = op;
        this.value = value;
        this.scope = scope;
    }

    public static GetConditionQuery(filters: QueryFilter[], params: string[]) {
        (...)
    }

    public static queryComparator(value1: any, value2: any, operator: string): any {
        (...)
    }
}
在Module1上,我将Module2添加到
package.json
中,因此当我想使用
QueryFilter
时,我要求它如下:

模块1-Class.ts:

import { QueryFilter } = require("Module2").queryFilter;
现在我的问题是,从模块2中的每个文件中导出单个项并以这种方式使用它是否足够?或者我应该有一个
索引
,从Module2导出每个文件,以便Module1可以看到它们

大致如下:

模块2-index.ts:

export "./utils"
export "./queryFilter"
(...)
正确的做法是什么?我对这一点完全是新手,我读过的文件没有说明这一点


致以最诚挚的问候

在您最后的评论之后,这是创建模块/库的“typescript解决方案”。解决方案与“纯”ES6类似;打字脚本只是增加了一小层难度

假设您编写了一个包含多个文件的模块/库:

功能1.ts

功能2.ts

创建index.ts,重新导出模块/lib中感兴趣的部分

export * from './func1'
export * from './func2'
....
显然,您可以选择(重新)导出并仅公开部分代码,例如从“/anotheFile”导出{thisFunc,thatClass}

使用
声明
commonjs
标志编译模块,并确保
package.json
main
指向
index.js
,而
键入
入口指向生成的
index.d.ts

现在可以使用ES6风格的导入语法从Javascript或Typescript使用此模块/库

import { func1, func2 } from 'mymodule'

如果这是Typescript,这两个函数的类型也将自动导入。

在您最后的评论之后,这是创建模块/库的“Typescript解决方案”。解决方案与“纯”ES6类似;打字脚本只是增加了一小层难度

假设您编写了一个包含多个文件的模块/库:

功能1.ts

功能2.ts

创建index.ts,重新导出模块/lib中感兴趣的部分

export * from './func1'
export * from './func2'
....
显然,您可以选择(重新)导出并仅公开部分代码,例如从“/anotheFile”导出{thisFunc,thatClass}

使用
声明
commonjs
标志编译模块,并确保
package.json
main
指向
index.js
,而
键入
入口指向生成的
index.d.ts

现在可以使用ES6风格的导入语法从Javascript或Typescript使用此模块/库

import { func1, func2 } from 'mymodule'

如果这是Typescript,那么这两个函数的类型也将自动导入。

@Darkrum感谢您的帮助回答,因为这确实是TS和JS之间差异最糟糕的例子之一。有人将不得不就此提出一个明确的指南。。。我现在没有时间,但你可以先检查一下(框架是你的模块2)和Tks@BrunoGrieder。这本身不是一个打字问题。它是用TypeScript编写的,但这里的问题是如何将多个文件中声明的大量导出公开到一个import/require调用中。请注意,除了您的
import=require
,您的
export
语法实际上正是ES6中使用的语法。将
import{QueryFilter}=require('Module2')。QueryFilter
改为
import{QueryFilter as QueryFilter}从'Module2'
开始,您就有了ES6语法。@BrunoGrieder我做到了。我已经在重构了。我喜欢在将答案标记为已接受之前进行测试;)@Darkrum感谢您的帮助性回答,因为这确实是TS和JS之间差异的最糟糕的例子之一。有人必须就这一点提出明确的指南。。。我现在没有时间,但你可以先检查一下(框架是你的模块2)和Tks@BrunoGrieder。这本身不是一个打字问题。它是用TypeScript编写的,但这里的问题是如何将多个文件中声明的大量导出公开到一个import/require调用中。请注意,除了您的
import=require
,您的
export
语法实际上正是ES6中使用的语法。将
import{QueryFilter}=require('Module2')。QueryFilter
改为
import{QueryFilter as QueryFilter}从'Module2'
开始,您就有了ES6语法。@BrunoGrieder我做到了。我已经在重构了。我喜欢在将答案标记为已接受之前进行测试;)不知怎么的,这仍然不起作用。。我添加了第二个编辑,带有“流”和错误消息。该方法看起来还可以,但看起来应该