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.
javascript
import
header
node.js
TIMEX
sumber
sumber
require
folder di direktori yang sama pada Windows. Anda harus menggunakan pengalamatan unix-style:./mydir
bukan yang lamamydir
.node_modules
folder luar . npmjs.com/package/node-import Semoga ini bisa membantu. Terima kasih!Jawaban:
Anda dapat meminta file js apa pun, Anda hanya perlu mendeklarasikan apa yang ingin Anda ungkapkan.
Dan di file aplikasi Anda:
sumber
require("http://javascript-modules.googlecode.com/svn/functionChecker.js")
sepertinya tidak mengimpor modul dengan benar. Apakah ada cara lain untuk mengimpor skrip eksternal?Jika, terlepas dari semua jawaban lain, Anda masih ingin memasukkan file secara tradisional ke file sumber node.js, Anda dapat menggunakan ini:
+''
diperlukan untuk mendapatkan konten file sebagai string dan bukan objek (Anda juga dapat menggunakan.toString()
jika Anda mau).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.sumber
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
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 sepertitools.sum(1,2);
kita cukup menelepon
lalu
dalam kasus saya, saya memiliki file dengan pengontrol ctrls.js
dan saya dapat menggunakan
Categories
dalam setiap konteks sebagai kelas publik setelahnyarequire('ctrls.js')()
sumber
this
dalam suatu fungsi adalah ruang lingkup global ketika fungsi tersebut disebut secara langsung (tidak terikat dengan cara apa pun).require('blah.js')();
harus izinkan saya untuk mengimpor semuanya ke dalam cakupan yang sama !!! Terima kasih!!!Buat dua file js
File js utama
Output Konsol
sumber
Berikut ini penjelasan yang sederhana dan sederhana:
Konten Server.js:
Konten Helpers.js:
sumber
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:
Tentu, itu membantu.
sumber
buat dua file misalnya
app.js
dantools.js
app.js
tools.js
keluaran
sumber
mengatakan kita ingin memanggil fungsi ping () dan tambahkan (30,20) yang di lib.js file dari main.js
main.js
lib.js
sumber
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:
sumber
Udo G. berkata:
Dia benar, tetapi ada cara untuk mempengaruhi ruang lingkup global dari suatu fungsi. Memperbaiki contohnya:
Semoga itu bisa membantu.
sumber
Ini bekerja dengan saya seperti berikut ini ....
Lib1.js
sekarang dalam file Main.js Anda harus menyertakan Lib1.js
Harap diingat untuk meletakkan Lib1.js di folder node_modules .
sumber
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
exports
objek. Lihatlah modul ekspor Node.js Memahami untuk lebih detail.sumber
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
Dan kemudian dalam kode utama Anda, Anda dapat memanggil fungsi Anda dengan nama seperti:
main.js
Akan membuat output ini
Perhatikan undefined ketika Anda memanggil objek saya.funcFour () , itu akan sama jika Anda memuat dengan eval () . Semoga bermanfaat :)
sumber
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)
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 :
sumber
app.js
tools.js
sumber
Sertakan file dan jalankan dalam konteks yang diberikan (non-global)
fileToInclude.js
main.js
sumber
Ini adalah cara terbaik yang saya buat sejauh ini.
Anda masih perlu memberi tahu apa yang ingin Anda ekspor
sumber
Seperti Anda memiliki file
abc.txt
dan banyak lagi?Buat 2 file:
fileread.js
danfetchingfile.js
, lalufileread.js
tulis kode ini:Dalam
fetchingfile.js
menulis kode ini:Sekarang, di terminal: $ node fetchingfile.js --file = abc.txt
Anda memberikan nama file sebagai argumen, apalagi menyertakan semua file
readfile.js
alih-alih meneruskannya.Terima kasih
sumber
Anda bisa sederhana saja
require('./filename')
.Misalnya.
Harap dicatat bahwa:
sumber
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
SampleModule - index.js
Semoga ini bisa membantu entah bagaimana.
sumber
Metode lain saat menggunakan framework node.js dan express.js
simpan ini dalam file js bernama s dan di statika folder
Sekarang untuk menggunakan fungsi
sumber
Saya telah datang dengan metode yang agak kasar menangani ini untuk templating HTML. Begitu pula dengan PHP
<?php include("navigation.html"); ?>
sumber
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:
di app.js, tambahkan:
pengungkapan - Saya adalah penulis gurita, dan dibangun jika untuk usecase serupa saya, karena saya tidak dapat menemukan perpustakaan ringan.
sumber
Untuk mengubah "alat" menjadi modul, saya tidak melihat kesulitan sama sekali. Terlepas dari semua jawaban lain, saya masih akan merekomendasikan penggunaan module.exports:
Sekarang kita perlu menetapkan ekspor ini ke ruang lingkup global (di aplikasi Anda | index | server.js)
Sekarang Anda dapat merujuk dan memanggil fungsi sebagai:
sumber
Menggunakan:
app.js:
sumber
./tools.js