Di Node.js, bagaimana cara saya "memasukkan" fungsi dari file saya yang lain?

969

Katakanlah saya memiliki file bernama app.js. Cukup mudah:

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);

Bagaimana jika saya memiliki fungsi di dalam "tools.js". Bagaimana saya mengimpornya untuk digunakan di apps.js?

Atau ... apakah saya harus mengubah "alat" menjadi modul, dan kemudian memerlukannya? << sepertinya sulit, saya lebih suka melakukan impor dasar file tools.js.

TIMEX
sumber
4
Apa yang melemparkan saya ke sini adalah requirefolder di direktori yang sama pada Windows. Anda harus menggunakan pengalamatan unix-style: ./mydirbukan yang lama mydir.
Ben
1
Saya membuat modul untuk mengimpor skrip, mengekspor ke file, dan memasukkan modul dari node_modulesfolder luar . npmjs.com/package/node-import Semoga ini bisa membantu. Terima kasih!
Nanang Mahdaen El-Agung

Jawaban:

1416

Anda dapat meminta file js apa pun, Anda hanya perlu mendeklarasikan apa yang ingin Anda ungkapkan.

// tools.js
// ========
module.exports = {
  foo: function () {
    // whatever
  },
  bar: function () {
    // whatever
  }
};

var zemba = function () {
}

Dan di file aplikasi Anda:

// app.js
// ======
var tools = require('./tools');
console.log(typeof tools.foo); // => 'function'
console.log(typeof tools.bar); // => 'function'
console.log(typeof tools.zemba); // => undefined
masylum
sumber
101
+1 Dilakukan dengan baik, bahkan membatasi kode yang diimpor ke namespace itu sendiri. Saya harus membuat catatan ini untuk nanti.
Evan Plaice
8
Saya ingin tahu apakah mungkin mengimpor skrip eksternal. require("http://javascript-modules.googlecode.com/svn/functionChecker.js")sepertinya tidak mengimpor modul dengan benar. Apakah ada cara lain untuk mengimpor skrip eksternal?
Anderson Green
6
Dan bagaimana jika saya harus meneruskan variabel ke dalam fungsi Seperti, bar: fungsi (a, b) {// beberapa kode}
Nishutosh Sharma
5
Karena Anda mengekspos properti, saya akan menggunakan ekspor alih-alih module.exports. Untuk ekspor vs module.exports: stackoverflow.com/questions/5311334/…
Pertanian
4
cara memanggil function bar (), inside foo () function, berarti cara mengakses satu fungsi dengan yang lain
pitu
303

Jika, terlepas dari semua jawaban lain, Anda masih ingin memasukkan file secara tradisional ke file sumber node.js, Anda dapat menggunakan ini:

var fs = require('fs');

// file is included here:
eval(fs.readFileSync('tools.js')+'');
  • Penggabungan string kosong +''diperlukan untuk mendapatkan konten file sebagai string dan bukan objek (Anda juga dapat menggunakan .toString()jika Anda mau).
  • Eval () tidak dapat digunakan di dalam suatu fungsi dan harus dipanggil di dalam lingkup global jika tidak, tidak ada fungsi atau variabel yang dapat diakses (yaitu Anda tidak dapat membuat include()fungsi utilitas atau sesuatu seperti itu).

Harap dicatat bahwa dalam kebanyakan kasus ini adalah praktik buruk dan Anda sebaiknya menulis modul . Namun, ada situasi yang jarang, di mana pencemaran konteks / namespace lokal Anda adalah apa yang Anda inginkan.

Perbarui 2015-08-06

Harap perhatikan juga bahwa ini tidak akan bekerja dengan "use strict";(ketika Anda berada dalam "mode ketat" ) karena fungsi dan variabel yang ditentukan dalam file "diimpor" tidak dapat diakses oleh kode yang melakukan impor. Mode ketat memberlakukan beberapa aturan yang ditentukan oleh versi standar bahasa yang lebih baru. Ini mungkin alasan lain untuk menghindari solusi yang dijelaskan di sini.

Udo G
sumber
41
Keren, ini berguna untuk quick'n'dirty menempatkan JS libs yang dirancang untuk sisi klien ke dalam aplikasi node.js tanpa perlu mempertahankan garpu bergaya Node.
Kos
18
Saya baru saja menjawab pertanyaan awal, yaitu tentang memasukkan kode, bukan menulis modul. Yang pertama dapat memiliki keuntungan dalam situasi tertentu. Juga, anggapan Anda tentang persyaratan salah: Kode ini tentu saja dievaluasi, tetapi tetap berada di namespace sendiri dan tidak memiliki cara untuk "mencemari" namespace konteks panggilan, maka Anda perlu eval () sendiri. Dalam kebanyakan kasus menggunakan metode yang dijelaskan dalam anwer saya adalah praktik yang buruk tetapi bukan saya yang harus memutuskan apakah itu untuk TIMEX.
Udo G
14
@ EvanPlaice: apakah Anda memiliki saran yang lebih baik yang sebenarnya menjawab pertanyaan ? Jika Anda perlu memasukkan file yang bukan modul , apakah Anda memiliki pendekatan yang lebih baik dari ini?
Jalf
8
Kadang-kadang ketika Anda perlu memasukkan, dan kadang-kadang memerlukan, mereka adalah dua konsep yang berbeda secara mendasar dalam sebagian besar bahasa pemrograman, Node JS juga. Kemampuan untuk memasukkan js di tempat harus menjadi bagian dari Node untuk jujur, tetapi menilai itu pada dasarnya adalah solusi yang layak. Terpilih.
J. Martin
4
Catatan yang tidak kompatibel dengan penggunaan yang ketat - seperti penggunaan yang ketat akan membatasi penggunaan eval dengan memblokir pengenalan variabel baru melalui eval, dll.
timbo
189

Anda tidak memerlukan fungsi baru atau modul baru. Anda hanya perlu menjalankan modul yang Anda panggil jika Anda tidak ingin menggunakan namespace.

di tools.js

module.exports = function() { 
    this.sum = function(a,b) { return a+b };
    this.multiply = function(a,b) { return a*b };
    //etc
}

di app.js

atau di .js lainnya seperti myController.js:

dari pada

var tools = require('tools.js') yang memaksa kita untuk menggunakan namespace dan alat panggilan seperti tools.sum(1,2);

kita cukup menelepon

require('tools.js')();

lalu

sum(1,2);

dalam kasus saya, saya memiliki file dengan pengontrol ctrls.js

module.exports = function() {
    this.Categories = require('categories.js');
}

dan saya dapat menggunakan Categoriesdalam setiap konteks sebagai kelas publik setelahnyarequire('ctrls.js')()

Nick Panov
sumber
12
Bagaimana ini tidak memiliki lebih banyak +1? Ini adalah solusi nyata untuk pertanyaan yang diajukan (meskipun bukan yang 'resmi'). Ini juga sejuta kali lebih mudah untuk di-debug daripada eval () karena node dapat memberikan tumpukan panggilan yang bermanfaat alih-alih menunjuk ke file yang sebenarnya alih-alih hanya tidak ditentukan.
user3413723
5
Perhatikan bahwa Anda tidak dapat "menggunakan mode" ketat "dalam modul yang diimpor.
David
1
@Nick Panov: brilian! Perlu dicatat bahwa ini berfungsi karena thisdalam suatu fungsi adalah ruang lingkup global ketika fungsi tersebut disebut secara langsung (tidak terikat dengan cara apa pun).
Udo G
3
ini baru saja mengubah hidup saya, tidak ada lelucon - memiliki 1000 + file baris yang saya tidak bisa putus karena variabel metode yang berbeda semua saling berkorelasi dan akan membutuhkan semua dalam ruang lingkup yang sama ... require('blah.js')();harus izinkan saya untuk mengimpor semuanya ke dalam cakupan yang sama !!! Terima kasih!!!
Sam Johnson
2
Ini tip yang bagus! Peringatan: jika Anda mendeklarasikan fungsi module.exports menggunakan sintaks pintas () => {} alih-alih deklarasi fungsi standar () {}, itu gagal. Butuh waktu satu jam untuk mencari tahu di mana masalahnya! (Fungsi panah tidak memiliki properti 'ini' sendiri: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… )
Ryan Griggs
117

Buat dua file js

// File cal.js
module.exports = {
    sum: function(a,b) {
        return a+b
    },
    multiply: function(a,b) {
        return a*b
    }
};

File js utama

// File app.js
var tools = require("./cal.js");
var value = tools.sum(10,20);
console.log("Value: "+value);

Output Konsol

Value: 30
Jayaprakash G
sumber
Versi js apa yang berfungsi?
Mirv - Matt
39

Berikut ini penjelasan yang sederhana dan sederhana:

Konten 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);

Konten 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 () 
{
};
Placeholder
sumber
34

Saya juga mencari fungsi 'include' NodeJS dan saya memeriksa solusi yang diajukan oleh Udo G - lihat pesan https://stackoverflow.com/a/8744519/2979590 . Kode nya tidak berfungsi dengan file JS saya yang disertakan. Akhirnya saya memecahkan masalah seperti itu:

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');

Tentu, itu membantu.

jmparatte
sumber
2
Saya mengerti betapa jeleknya peretasan ini, tapi itu jelas membantu saya.
lindhe
30

buat dua file misalnya app.jsdantools.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
    }

keluaran

6
2
YouBee
sumber
26

mengatakan kita ingin memanggil fungsi ping () dan tambahkan (30,20) yang di lib.js file dari main.js

main.js

lib = require("./lib.js")

output = lib.ping();
console.log(output);

//Passing Parameters
console.log("Sum of A and B = " + lib.add(20,30))

lib.js

this.ping=function ()
{
    return  "Ping Success"
}
//Functions with parameters
this.add=function(a,b)
    {
        return a+b
    }
Dharmesh
sumber
1
Ini berfungsi, tetapi bukankah kita seharusnya menggunakan sintaks modul saat menyertakan skrip?
Kokodoko
25

Modul vm di Node.js menyediakan kemampuan untuk mengeksekusi kode JavaScript dalam konteks saat ini (termasuk objek global). Lihat http://nodejs.org/docs/latest/api/vm.html#vm_vm_runinthiscontextext_code_filename

Perhatikan bahwa, mulai hari ini, ada bug dalam modul vm yang mencegah runInThisContext melakukan hal yang benar ketika dipanggil dari konteks baru. Ini hanya penting jika program utama Anda mengeksekusi kode dalam konteks baru dan kemudian kode itu memanggil runInThisContext. Lihat https://github.com/joyent/node/issues/898

Sayangnya, pendekatan with (global) yang disarankan Fernando tidak berfungsi untuk fungsi bernama seperti "function foo () {}"

Singkatnya, inilah fungsi include () yang berfungsi untuk saya:

function include(path) {
    var code = fs.readFileSync(path, 'utf-8');
    vm.runInThisContext(code, path);
}
Chad Austin
sumber
Saya menemukan vm.runInThisContext dalam jawaban SO lainnya, dan telah menggunakannya, untuk memasukkan file kode Javascript "vanilla". Namun saya mencoba menggunakannya untuk memasukkan kode yang bergantung pada fungsi simpul (mis. "Var fs = require ('fs')"), dan itu tidak akan berfungsi. Namun dalam hal itu, solusi "eval" yang dicatat dalam beberapa jawaban, memang bekerja.
Dexygen
Memikirkan hal ini sedikit lebih banyak, ketika Anda mulai perlu memasukkan kode yang tergantung pada fungsi simpul, mungkin sudah waktunya untuk menulis modul, meskipun solusi eval bisa menjadi langkah pertama dalam proses itu
Dexygen
Hanya satu yang bekerja di node.js pada 2019
meesern
13

Udo G. berkata:

  • Eval () tidak dapat digunakan di dalam suatu fungsi dan harus dipanggil di dalam lingkup global jika tidak, tidak ada fungsi atau variabel yang dapat diakses (yaitu Anda tidak dapat membuat fungsi utilitas include () atau sesuatu seperti itu).

Dia benar, tetapi ada cara untuk mempengaruhi ruang lingkup global dari suatu fungsi. Memperbaiki contohnya:

function include(file_) {
    with (global) {
        eval(fs.readFileSync(file_) + '');
    };
};

include('somefile_with_some_declarations.js');

// the declarations are now accessible here.

Semoga itu bisa membantu.

Fernando
sumber
12

Ini bekerja dengan saya seperti berikut ini ....

Lib1.js

//Any other private code here 

// Code you want to export
exports.function1 = function(params) {.......};
exports.function2 = function(params) {.......};

// Again any private code

sekarang dalam file Main.js Anda harus menyertakan Lib1.js

var mylib = requires('lib1.js');
mylib.function1(params);
mylib.function2(params);

Harap diingat untuk meletakkan Lib1.js di folder node_modules .

M.Hefny
sumber
11

Anda dapat menempatkan fungsi Anda dalam variabel global, tetapi praktik yang lebih baik untuk hanya mengubah skrip alat Anda menjadi modul. Ini benar-benar tidak terlalu sulit - cukup lampirkan API publik Anda ke exportsobjek. Lihatlah modul ekspor Node.js Memahami untuk lebih detail.

Jimmy Cuadra
sumber
1
Contohnya lebih baik daripada tautan
tno2007
11

Cara lain untuk melakukan ini menurut saya, adalah untuk mengeksekusi semua yang ada di file lib ketika Anda memanggil function () menggunakan (function (/ * things here * /) {}) (); melakukan hal ini akan membuat semua fungsi-fungsi ini lingkup global, persis seperti eval () solusi

src / lib.js

(function () {
    funcOne = function() {
            console.log('mlt funcOne here');
    }

    funcThree = function(firstName) {
            console.log(firstName, 'calls funcThree here');
    }

    name = "Mulatinho";
    myobject = {
            title: 'Node.JS is cool',
            funcFour: function() {
                    return console.log('internal funcFour() called here');
            }
    }
})();

Dan kemudian dalam kode utama Anda, Anda dapat memanggil fungsi Anda dengan nama seperti:

main.js

require('./src/lib')
funcOne();
funcThree('Alex');
console.log(name);
console.log(myobject);
console.log(myobject.funcFour());

Akan membuat output ini

bash-3.2$ node -v
v7.2.1
bash-3.2$ node main.js 
mlt funcOne here
Alex calls funcThree here
Mulatinho
{ title: 'Node.JS is cool', funcFour: [Function: funcFour] }
internal funcFour() called here
undefined

Perhatikan undefined ketika Anda memanggil objek saya.funcFour () , itu akan sama jika Anda memuat dengan eval () . Semoga bermanfaat :)

Alexandre Mulatinho
sumber
10

Saya hanya ingin menambahkan, jika Anda hanya perlu fungsi tertentu yang diimpor dari tools.js Anda , maka Anda dapat menggunakan tugas penataan yang didukung di node.js sejak versi 6.4 - lihat node.green .


Contoh : (kedua file berada di folder yang sama)

tools.js

module.exports = {
    sum: function(a,b) {
        return a + b;
    },
    isEven: function(a) {
        return a % 2 == 0;
    }
};

main.js

const { isEven } = require('./tools.js');

console.log(isEven(10));

keluaran: true


Ini juga menghindari Anda menetapkan fungsi-fungsi tersebut sebagai properti dari objek lain seperti halnya dalam penugasan (umum) berikut:

const tools = require('./tools.js');

di mana Anda perlu menelepon tools.isEven(10).


CATATAN:

Jangan lupa untuk awalan nama file Anda dengan jalur yang benar - bahkan jika kedua file berada di folder yang sama, Anda perlu awalan dengan ./

Dari Node.js docs :

Tanpa '/', './', atau '../' yang mengarah untuk menunjukkan file, modul harus berupa modul inti atau diambil dari folder node_modules.

Kristianmitk
sumber
10

app.js

let { func_name } = require('path_to_tools.js');
func_name();    //function calling

tools.js

let func_name = function() {
    ...
    //function body
    ...
};

module.exports = { func_name };
Ashish Duklan
sumber
3

Sertakan file dan jalankan dalam konteks yang diberikan (non-global)

fileToInclude.js

define({
    "data": "XYZ"
});

main.js

var fs = require("fs");
var vm = require("vm");

function include(path, context) {
    var code = fs.readFileSync(path, 'utf-8');
    vm.runInContext(code, vm.createContext(context));
}


// Include file

var customContext = {
    "define": function (data) {
        console.log(data);
    }
};
include('./fileToInclude.js', customContext);
pengguna11153
sumber
2

Ini adalah cara terbaik yang saya buat sejauh ini.

var fs = require('fs'),
    includedFiles_ = {};

global.include = function (fileName) {
  var sys = require('sys');
  sys.puts('Loading file: ' + fileName);
  var ev = require(fileName);
  for (var prop in ev) {
    global[prop] = ev[prop];
  }
  includedFiles_[fileName] = true;
};

global.includeOnce = function (fileName) {
  if (!includedFiles_[fileName]) {
    include(fileName);
  }
};

global.includeFolderOnce = function (folder) {
  var file, fileName,
      sys = require('sys'),
      files = fs.readdirSync(folder);

  var getFileName = function(str) {
        var splited = str.split('.');
        splited.pop();
        return splited.join('.');
      },
      getExtension = function(str) {
        var splited = str.split('.');
        return splited[splited.length - 1];
      };

  for (var i = 0; i < files.length; i++) {
    file = files[i];
    if (getExtension(file) === 'js') {
      fileName = getFileName(file);
      try {
        includeOnce(folder + '/' + file);
      } catch (err) {
        // if (ext.vars) {
        //   console.log(ext.vars.dump(err));
        // } else {
        sys.puts(err);
        // }
      }
    }
  }
};

includeFolderOnce('./extensions');
includeOnce('./bin/Lara.js');

var lara = new Lara();

Anda masih perlu memberi tahu apa yang ingin Anda ekspor

includeOnce('./bin/WebServer.js');

function Lara() {
  this.webServer = new WebServer();
  this.webServer.start();
}

Lara.prototype.webServer = null;

module.exports.Lara = Lara;
Saulo Castelo Sampaio
sumber
2

Seperti Anda memiliki file abc.txtdan banyak lagi?

Buat 2 file: fileread.jsdan fetchingfile.js, lalu fileread.jstulis kode ini:

function fileread(filename) {
    var contents= fs.readFileSync(filename);
        return contents;
    }

    var fs = require("fs");  // file system

    //var data = fileread("abc.txt");
    module.exports.fileread = fileread;
    //data.say();
    //console.log(data.toString());
}

Dalam fetchingfile.jsmenulis kode ini:

function myerror(){
    console.log("Hey need some help");
    console.log("type file=abc.txt");
}

var ags = require("minimist")(process.argv.slice(2), { string: "file" });
if(ags.help || !ags.file) {
    myerror();
    process.exit(1);
}
var hello = require("./fileread.js");
var data = hello.fileread(ags.file);  // importing module here 
console.log(data.toString());

Sekarang, di terminal: $ node fetchingfile.js --file = abc.txt

Anda memberikan nama file sebagai argumen, apalagi menyertakan semua file readfile.jsalih-alih meneruskannya.

Terima kasih

Gajender Singh
sumber
2

Anda bisa sederhana saja require('./filename').

Misalnya.

// file: index.js
var express = require('express');
var app = express();
var child = require('./child');
app.use('/child', child);
app.get('/', function (req, res) {
  res.send('parent');
});
app.listen(process.env.PORT, function () {
  console.log('Example app listening on port '+process.env.PORT+'!');
});
// file: child.js
var express = require('express'),
child = express.Router();
console.log('child');
child.get('/child', function(req, res){
  res.send('Child2');
});
child.get('/', function(req, res){
  res.send('Child');
});

module.exports = child;

Harap dicatat bahwa:

  1. Anda tidak dapat mendengarkan PORT pada file anak, hanya modul induk express yang memiliki pendengar PORT
  2. Anak menggunakan 'Router', bukan orangtua Express moudle.
Weijing Lin
sumber
1

Saya juga mencari opsi untuk memasukkan kode tanpa menulis modul, resp. menggunakan sumber mandiri yang diuji sama dari proyek yang berbeda untuk layanan Node.js - dan jawaban jmparatte melakukannya untuk saya.

Keuntungannya adalah, Anda tidak mencemari namespace, saya tidak memiliki masalah dengan "use strict";dan itu bekerja dengan baik.

Di sini contoh lengkap :

Script untuk memuat - /lib/foo.js

"use strict";

(function(){

    var Foo = function(e){
        this.foo = e;
    }

    Foo.prototype.x = 1;

    return Foo;

}())

SampleModule - index.js

"use strict";

const fs = require('fs');
const path = require('path');

var SampleModule = module.exports = {

    instAFoo: function(){
        var Foo = eval.apply(
            this, [fs.readFileSync(path.join(__dirname, '/lib/foo.js')).toString()]
        );
        var instance = new Foo('bar');
        console.log(instance.foo); // 'bar'
        console.log(instance.x); // '1'
    }

}

Semoga ini bisa membantu entah bagaimana.

zyexal
sumber
1

Metode lain saat menggunakan framework node.js dan express.js

var f1 = function(){
   console.log("f1");
}
var f2 = function(){
   console.log("f2");
}

module.exports = {
   f1 : f1,
   f2 : f2
}

simpan ini dalam file js bernama s dan di statika folder

Sekarang untuk menggunakan fungsi

var s = require('../statics/s');
s.f1();
s.f2();
suku
sumber
1

Saya telah datang dengan metode yang agak kasar menangani ini untuk templating HTML. Begitu pula dengan PHP<?php include("navigation.html"); ?>

server.js

var fs = require('fs');

String.prototype.filter = function(search,replace){
    var regex = new RegExp("{{" + search.toUpperCase() + "}}","ig");
    return this.replace(regex,replace);
}

var navigation = fs.readFileSync(__dirname + "/parts/navigation.html");

function preProcessPage(html){
    return html.filter("nav",navigation);
}

var express = require('express');
var app = express();
// Keep your server directory safe.
app.use(express.static(__dirname + '/public/'));
// Sorta a server-side .htaccess call I suppose.
app.get("/page_name/",function(req,res){
    var html = fs.readFileSync(__dirname + "/pages/page_name.html");
    res.send(preProcessPage(html));
});

page_name.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>NodeJS Templated Page</title>
    <link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="/css/font-awesome.min.css">
    <!-- Scripts Load After Page -->
    <script type="text/javascript" src="/js/jquery.min.js"></script>
    <script type="text/javascript" src="/js/tether.min.js"></script>
    <script type="text/javascript" src="/js/bootstrap.min.js"></script>
</head>
<body>
    {{NAV}}
    <!-- Page Specific Content Below Here-->
</body>
</html>

navigation.html

<nav></nav>

Hasil Halaman yang Dimuat

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>NodeJS Templated Page</title>
    <link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="/css/font-awesome.min.css">
    <!-- Scripts Load After Page -->
    <script type="text/javascript" src="/js/jquery.min.js"></script>
    <script type="text/javascript" src="/js/tether.min.js"></script>
    <script type="text/javascript" src="/js/bootstrap.min.js"></script>
</head>
<body>
    <nav></nav>
    <!-- Page Specific Content Below Here-->
</body>
</html>
Matthew D Auld
sumber
0

Jika Anda ingin memanfaatkan banyak arsitektur CPU & Microservice, untuk mempercepat ... Gunakan RPC di atas proses bercabang.

Kedengarannya rumit, tetapi sederhana jika Anda menggunakan gurita .

Ini sebuah contoh:

di tools.js tambahkan:

const octopus = require('octopus');
var rpc = new octopus('tools:tool1');

rpc.over(process, 'processRemote');

var sum = rpc.command('sum'); // This is the example tool.js function to make available in app.js

sum.provide(function (data) { // This is the function body
    return data.a + data.b;
});

di app.js, tambahkan:

const { fork } = require('child_process');
const octopus = require('octopus');
const toolprocess = fork('tools.js');

var rpc = new octopus('parent:parent1');
rpc.over(toolprocess, 'processRemote');

var sum = rpc.command('sum');

// Calling the tool.js sum function from app.js
sum.call('tools:*', {
    a:2, 
    b:3
})
.then((res)=>console.log('response : ',rpc.parseResponses(res)[0].response));

pengungkapan - Saya adalah penulis gurita, dan dibangun jika untuk usecase serupa saya, karena saya tidak dapat menemukan perpustakaan ringan.

DhavalW
sumber
0

Untuk mengubah "alat" menjadi modul, saya tidak melihat kesulitan sama sekali. Terlepas dari semua jawaban lain, saya masih akan merekomendasikan penggunaan module.exports:

//util.js
module.exports = {
   myFunction: function () {
   // your logic in here
   let message = "I am message from myFunction";
   return message; 
  }
}

Sekarang kita perlu menetapkan ekspor ini ke ruang lingkup global (di aplikasi Anda | index | server.js)

var util = require('./util');

Sekarang Anda dapat merujuk dan memanggil fungsi sebagai:

//util.myFunction();
console.log(util.myFunction()); // prints in console :I am message from myFunction 
StefaDesign
sumber
-3

Menggunakan:

var mymodule = require("./tools.js")

app.js:

module.exports.<your function> = function () {
    <what should the function do>
}
pembuat kode
sumber
1
Anda seharusnya hampir tidak pernah menggunakan direktori lengkap. Anda harus mempertimbangkan untuk menggunakan jalur relatif seperti:./tools.js
Matthew D Auld