我在Node.js模块中找到了以下合同:
module.exports = exports = nano = function database_module(cfg) {...}
Run Code Online (Sandbox Code Playgroud)
我不知道什么之间的不同module.exports和exports为什么都被用在这里.
这是我的第一个文件:
var self=this;
var config ={
'confvar':'configval'
};
Run Code Online (Sandbox Code Playgroud)
我想在另一个文件中使用这个配置变量,所以我在另一个文件中做的是:
conf = require('./conf');
url=conf.config.confvar;
Run Code Online (Sandbox Code Playgroud)
但它给了我一个错误.
TypeError: Cannot read property 'confvar' of undefined
Run Code Online (Sandbox Code Playgroud)
请建议我该怎么办?
我正在尝试从Node.js 6.2.0中的CommonJS模块导出ES6类
class MyClass{
//class contents here
}
exports = MyClass;
Run Code Online (Sandbox Code Playgroud)
然后在另一个模块中导入它:
var MyClass = require('/path/to/module.js')
var instance = new MyClass();
Run Code Online (Sandbox Code Playgroud)
但是我得到以下异常:
TypeError: MyClass is not a constructor
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
请注意,我没有使用Babel/Tranceur,它是纯粹的JS,在最新的Node 6.2.0中实现,根据Kangax,93%实现了ES6.
//编辑:这对export和module.exports来说不是问题.虽然单独使用导出,但我得到了一些__proto__set的对象.
注意: 我知道有很多关于这个主题的帖子,我已经回顾了很多已经没有成功的帖子(请参阅本文底部的参考资料).
我正在尝试使用Visual Studio Code在TypeScript中运行一个非常简单的测试,我在一个文件中声明一个类并将其导入另一个文件.但是,我继续遇到一个问题,我导入的文件无法识别从其他文件导出的类的方法.
我此时收到的确切错误消息是:
[ts]属性'getFirstName'在类型'typeof"module-test/src/OtherClass"'上不存在.
[ts]属性'getLastName'在类型'typeof"module-test/src/OtherClass"'上不存在.
我正在使用Node 9.3.0和TypeScript 2.6.2.
非常感谢任何人都可以提供给我的任何指导!
main.ts
import * as Other from "./OtherClass";
class myApp
{
public async start()
{
console.log("Starting application");
try
{
let firstName = await Other.getFirstName();
console.log("First Name: " + firstName);
let lastName = await Other.getLastName();
console.log("Last Name: " + lastName);
}
catch (error)
{
console.error("Unable to get name: " + error)
}
console.log("Ending application");
}
}
const app = new myApp();
app.start();Run Code Online (Sandbox Code Playgroud)
OtherClass.ts
class Other
{
getFirstName(): string
{
return …Run Code Online (Sandbox Code Playgroud)我在导出/导入模块方面的所有经验都来自使用export和的ES6中import,您可以在其中执行类似的操作,以使单个模块导出默认函数以及单独的命名函数。
// module.js
export default mainFunction
export { namedFunction }
// main.js
import mainFunction from 'functions'
mainFunction()
import { namedFunction } from 'function'
namedFunction()
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何使用module.exports和使用ES5样式导入来做到这一点require。据我了解,我可以导出一个默认值:
// module.js
module.exports = function mainFunction() {}
// main.js
const mainFunction = require('module.js')
Run Code Online (Sandbox Code Playgroud)
或者我可以创建命名的导出:
// module.js
module.exports = {
namedFunction: function() {}
}
// main.js
const namedFunction = require('module.js').namedFunction
Run Code Online (Sandbox Code Playgroud)
但是我不能两者都做。我以为可以这样命名出口之一“默认”,但它不起作用
// module.js
module.exports = {
default: function() {},
namedFunction: function() {}
}
// main.js
const mainFunction = …Run Code Online (Sandbox Code Playgroud) 我想在一个文件中导入一个类:
"use strict";
import models from "../model";
class Foo {
bar() {
}
}
export default new Foo();
Run Code Online (Sandbox Code Playgroud)
它在我使用import时有效,例如:
import Foo from "./foo";
console.log(Foo.bar); // [Function bar]
Run Code Online (Sandbox Code Playgroud)
问题是,使用require执行它会给我未定义:
var Foo = require("./foo");
console.log(Foo.bar); // undefined
Run Code Online (Sandbox Code Playgroud)
而Foo变量似乎是一个空类.为什么会这样?这是怎么回事?
node.js ×6
javascript ×5
commonjs ×2
ecmascript-6 ×2
babeljs ×1
ecmascript-5 ×1
node-modules ×1
typescript ×1