Node.js에 대한 간단한 서버를 작성 중이며 User
다음과 같은 자체 클래스를 사용하고 있습니다 .
function User(socket) {
this.socket = socket;
this.nickname = null;
/* ... just the typical source code like functions, variables and bugs ... */
this.write = function(object) {
this.socket.write(JSON.stringify(object));
}
};
그리고 나중에 프로세스를 많이 인스턴스화합니다.
var server = net.createServer(function (socket) {
/* other bugs */
var user = new User(socket);
/* more bugs and bad practise */
});
내 User
클래스 정의를 다른 자바 스크립트 파일 로 이동 하고 어떻게 든 “포함”할 수 있습니까?
답변
간단하게 다음과 같이 할 수 있습니다.
user.js
class User {
//...
}
module.exports = User
server.js
const User = require('./user.js')
// Instantiate User:
let user = new User()
이것을 CommonJS 모듈 이라고 합니다.
여러 값 내보내기
때로는 둘 이상의 값을 내보내는 것이 유용 할 수 있습니다. 예를 들어 클래스, 함수 또는 상수 일 수 있습니다.
user.js
class User {}
exports.User = User
exports.ROLE_ADMIN = 'admin'
exports.ROLE_USER = 'user'
export.isValidUser = function isValidUser() {
// ...
}
server.js
const {User, ROLE_ADMIN, ROLE_USER, isValidUser} = require('./user.js')
// Instantiate User:
let user = new User()
ES 모듈
Node.js 버전 14부터 CommonJS와 함께 ES 모듈을 사용할 수 있습니다. 자세한 내용은 ESM 설명서를 참조하십시오 .
다음은 ESM으로 구현 된 동일한 동작의 예입니다.
package.json
{
"type": "module"
}
user.js
export default class User {}
server.js
import User from './user.js'
let user = new User()
노트
⚠️ 전역을 사용하지 마십시오. 향후 코드와 충돌 할 가능성이 있습니다.
답변
ES6를 사용하면 다음을 가질 수 있습니다 user.js
.
export default class User {
constructor() {
...
}
}
그리고 그것을에서 사용하십시오 server.js
const User = require('./user.js').default;
const user = new User();
답변
다음과 같이 클래스 정의를 수정하십시오.
exports.User = function (socket) {
...
};
그런 다음 파일 이름을 user.js
. 기본 스크립트의 루트 디렉토리에 있다고 가정하면 다음과 같이 포함 할 수 있습니다.
var user = require('./user');
var someUser = new user.User();
그것은 빠르고 더러운 버전입니다. 에 대해 읽어 CommonJS 모듈 좀 더 알아 보려면.
답변
ES6에 대해 여기에 제공된 것 외에 다른 방법
module.exports = class TEST{
constructor(size) {
this.map = new MAp();
this.size = size;
}
get(key) {
return this.map.get(key);
}
length() {
return this.map.size;
}
}
다음과 같은 것을 포함
var TEST= require('./TEST');
var test = new TEST(1);
답변
이것을 다음에 추가하면 user.js
:
exports.User = User;
그런 다음 server.js
할 수 있습니다.
var userFile = require('./user.js');
var User = userFile.User;
http://nodejs.org/docs/v0.4.10/api/globals.html#require
또 다른 방법은 다음과 같습니다.
global.User = User;
그러면 다음으로 충분합니다 server.js
.
require('./user.js');
답변
여기서는 대부분의 답변이 작동하지 않는다는 점을 지적하고 싶습니다. “module.exports.yourClass”메서드가 계속 변경되거나 사람들이 잘못된 답변을 입력 한 경우 NodeJS 및 IDK를 처음 사용합니다.
// MyClass
module.exports.Ninja = class Ninja{
test(){
console.log('TESTING 1... 2... 3...');
};
}
//Using MyClass in seprate File
const ninjaFw = require('./NinjaFw');
let ninja = new ninjaFw.Ninja();
ninja.test();
- 이것이 제가 현재 사용하고있는 방법입니다. 이 구문을 좋아합니다. module.exports는 클래스 선언과 같은 줄에 있고 코드를 약간 정리하기 때문입니다. 다른 방법은 다음과 같습니다.
// Ninja Framework File
class Ninja{
test(){
console.log('TESTING 1... 2... 3...');
};
}
module.exports.Ninja = Ninja;
- 두 가지 다른 구문이지만 결국 동일한 결과입니다. 구문 마취의 문제입니다.
답변
myFile.js 대신 myFile.mjs와 같은 파일을 작성하십시오. 이 확장은 es6의 모든 장점과 함께 제공되지만 webpack과 Babel에게 추천합니다.