[javascript] Node.js에서 다른 파일의 기능을 어떻게 “포함”합니까?

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.jstools.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