app.js라는 파일이 있다고 가정 해 봅시다. 아주 간단합니다 :
var express = require('express');
var app = express.createServer();
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.get('/', function(req, res){
res.render('index', {locals: {
title: 'NowJS + Express Example'
}});
});
app.listen(8080);
“tools.js”안에 함수가 있으면 어떻게 되나요? apps.js에서 사용하기 위해 어떻게 가져 옵니까?
아니면 … “도구”를 모듈로 바꿔야합니까? << 어렵습니다. 오히려 tools.js 파일의 기본 가져 오기를 수행합니다.
답변
js 파일이 필요할 수 있습니다. 노출하려는 것을 선언하면됩니다.
// tools.js
// ========
module.exports = {
foo: function () {
// whatever
},
bar: function () {
// whatever
}
};
var zemba = function () {
}
그리고 앱 파일에서 :
// app.js
// ======
var tools = require('./tools');
console.log(typeof tools.foo); // => 'function'
console.log(typeof tools.bar); // => 'function'
console.log(typeof tools.zemba); // => undefined
답변
다른 모든 답변에도 불구하고 여전히 전통적 으로 node.js 소스 파일에 파일을 포함 하려는 경우 다음을 사용할 수 있습니다.
var fs = require('fs');
// file is included here:
eval(fs.readFileSync('tools.js')+'');
+''
파일 내용을 객체가 아닌 문자열로 가져 오려면 빈 문자열 연결 이 필요합니다 (.toString()
원하는 경우 에도 사용할 수 있음 ).- eval ()은 함수 내에서 사용될 수 없으며 전역 범위 내에서 호출 되어야합니다. 그렇지 않으면 함수 나 변수에 액세스 할 수 없습니다 (예 :
include()
유틸리티 함수 또는 이와 유사한 것을 만들 수 없음 ).
대부분의 경우 이것은 나쁜 습관 이므로 대신 모듈을 작성 해야 합니다 . 그러나 로컬 컨텍스트 / 네임 스페이스의 오염이 실제로 원하는 경우는 거의 없습니다.
2015-08-06 업데이트
또한 작동하지 않습니다이 있습니다 "use strict";
(당신이 때 “엄격 모드” 함수와 변수 때문에) 정의 은 “수입”파일을 액세스 할 수 없습니다 가져 오기를 수행하는 코드에 의해. 엄격 모드는 최신 버전의 언어 표준으로 정의 된 일부 규칙을 시행합니다. 여기에 설명 된 솔루션 을 피해야 하는 또 다른 이유 일 수 있습니다 .
답변
새로운 기능이나 새로운 모듈이 필요하지 않습니다. 네임 스페이스를 사용하지 않으려면 호출하는 모듈을 실행하면됩니다.
tools.js에서
module.exports = function() {
this.sum = function(a,b) { return a+b };
this.multiply = function(a,b) { return a*b };
//etc
}
app.js에서
또는 myController.js와 같은 다른 .js :
대신에
var tools = require('tools.js')
네임 스페이스를 사용하고 다음과 같은 도구를 호출해야합니다. tools.sum(1,2);
우리는 단순히 전화 할 수 있습니다
require('tools.js')();
그리고
sum(1,2);
내 경우에는 컨트롤러 ctrls.js 가있는 파일이 있습니다.
module.exports = function() {
this.Categories = require('categories.js');
}
그리고 나는 Categories
모든 상황에서 공개 수업으로 사용할 수 있습니다 .require('ctrls.js')()
답변
두 개의 js 파일 만들기
// File cal.js
module.exports = {
sum: function(a,b) {
return a+b
},
multiply: function(a,b) {
return a*b
}
};
메인 JS 파일
// File app.js
var tools = require("./cal.js");
var value = tools.sum(10,20);
console.log("Value: "+value);
콘솔 출력
Value: 30
답변
다음은 명확하고 간단한 설명입니다.
Server.js 컨텐츠 :
// Include the public functions from 'helpers.js'
var helpers = require('./helpers');
// Let's assume this is the data which comes from the database or somewhere else
var databaseName = 'Walter';
var databaseSurname = 'Heisenberg';
// Use the function from 'helpers.js' in the main file, which is server.js
var fullname = helpers.concatenateNames(databaseName, databaseSurname);
helpers.js 컨텐츠 :
// 'module.exports' is a node.JS specific feature, it does not work with regular JavaScript
module.exports =
{
// This is the function which will be called in the main file, which is server.js
// The parameters 'name' and 'surname' will be provided inside the function
// when the function is called in the main file.
// Example: concatenameNames('John,'Doe');
concatenateNames: function (name, surname)
{
var wholeName = name + " " + surname;
return wholeName;
},
sampleFunctionTwo: function ()
{
}
};
// Private variables and functions which will not be accessible outside this file
var privateFunction = function ()
{
};
답변
또한 NodeJS ‘include’기능을 찾고 있었고 Udo G가 제안한 솔루션을 확인했습니다-https://stackoverflow.com/a/8744519/2979590 메시지를 참조하십시오 . 그의 코드는 포함 된 JS 파일에서 작동하지 않습니다. 마지막으로 다음과 같은 문제를 해결했습니다.
var fs = require("fs");
function read(f) {
return fs.readFileSync(f).toString();
}
function include(f) {
eval.apply(global, [read(f)]);
}
include('somefile_with_some_declarations.js');
물론 도움이됩니다.
답변
두 파일이 예 생성 app.js
및tools.js
app.js
const tools= require("./tools.js")
var x = tools.add(4,2) ;
var y = tools.subtract(4,2);
console.log(x);
console.log(y);
tools.js
const add = function(x, y){
return x+y;
}
const subtract = function(x, y){
return x-y;
}
module.exports ={
add,subtract
}
산출
6
2