Допустим, у меня есть файл с именем 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.
javascript
import
header
node.js
TIMEX
источник
источник
require
наличие папки в том же каталоге в Windows. Вы должны использовать адресацию в стиле Unix:./mydir
вместо простого старогоmydir
.node_modules
папки. npmjs.com/package/node-import Надеюсь, что это может помочь. Спасибо!Ответы:
Вам может потребоваться любой файл js, вам просто нужно объявить то, что вы хотите выставить.
И в вашем файле приложения:
источник
require("http://javascript-modules.googlecode.com/svn/functionChecker.js")
похоже, неправильно импортирует модуль. Есть ли другой способ импортировать внешние скрипты?Если, несмотря на все остальные ответы, вы по-прежнему хотите традиционно включить файл в исходный файл node.js, вы можете использовать это:
+''
необходима для получения содержимого файла в виде строки, а не объекта (вы также можете использовать,.toString()
если хотите).include()
служебную функцию или что-то в этом роде).Обратите внимание, что в большинстве случаев это плохая практика, и вы должны вместо этого написать модуль . Однако есть редкие ситуации, когда загрязнение вашего локального контекста / пространства имен - это то, что вы действительно хотите.
Обновление 2015-08-06
Также обратите внимание, что это не будет работать
"use strict";
(когда вы находитесь в «строгом режиме» ), потому что функции и переменные, определенные в «импортированном» файле, не могут быть доступны с помощью кода, который выполняет импорт. В строгом режиме применяются некоторые правила, определенные в более новых версиях языкового стандарта. Это может быть еще одной причиной, чтобы избежать решения, описанного здесь.источник
Вам не нужны ни новые функции, ни новые модули. Вам просто нужно выполнить модуль, который вы вызываете, если вы не хотите использовать пространство имен.
в tools.js
в app.js
или в любом другом .js, например, myController.js:
вместо
var tools = require('tools.js')
что заставляет нас использовать пространство имен и вызывать такие инструменты, какtools.sum(1,2);
мы можем просто позвонить
а потом
в моем случае у меня есть файл с контроллерами ctrls.js
и я могу использовать
Categories
в любом контексте в качестве публичного класса послеrequire('ctrls.js')()
источник
this
в функции есть глобальная область, когда функция вызывается напрямую (никак не связана).require('blah.js')();
должен позвольте мне импортировать их все в одну область !!! Спасибо!!!Создать два файла JS
Основной файл JS
Консольный выход
источник
Вот простое и простое объяснение:
Содержание Server.js:
Содержание Helpers.js:
источник
Я также искал функцию включения в NodeJS и проверил решение, предложенное Udo G - см. Сообщение https://stackoverflow.com/a/8744519/2979590 . Его код не работает с моими включенными JS-файлами. Наконец я решил проблему так:
Конечно, это помогает.
источник
создать два файла, например
app.js
иtools.js
app.js
tools.js
вывод
источник
говорю , что мы хотим вызвать функцию пинг () и добавить (30,20) , который находится в lib.js файл из main.js
main.js
lib.js
источник
Модуль vm в Node.js предоставляет возможность выполнять код JavaScript в текущем контексте (включая глобальный объект). Видеть Http://nodejs.org/docs/latest/api/vm.html#vm_vm_runinthiscontext_code_filename
Обратите внимание, что на сегодняшний день в модуле vm есть ошибка, которая не позволяет runInThisContext делать то же самое при вызове из нового контекста. Это имеет значение только в том случае, если ваша основная программа выполняет код в новом контексте, а затем этот код вызывает runInThisContext. Видеть https://github.com/joyent/node/issues/898.
К сожалению, предложенный Фернандо метод with (global) не работает для именованных функций, таких как "function foo () {}"
Вкратце, вот функция include (), которая работает для меня:
источник
Удо Г. сказал:
Он прав, но есть способ повлиять на глобальную область видимости из функции. Улучшение своего примера:
Надеюсь, это поможет.
источник
Это работало со мной как следующее ....
Lib1.js
теперь в файле Main.js нужно включить Lib1.js
Пожалуйста, не забудьте поместить Lib1.js в папку node_modules .
источник
Вы можете поместить свои функции в глобальные переменные, но лучше просто превратить ваш скрипт инструментов в модуль. Это на самом деле не так уж сложно - просто прикрепите свой публичный API к
exports
объекту. Взгляните на модуль экспорта в Understanding Node.js, чтобы узнать больше.источник
По моему мнению, еще один способ сделать это - выполнить все в файле lib, когда вы вызываете функцию require () с помощью (function (/ * вещи здесь * /) {}) (); делая это сделает все эти функции глобального масштаба, так же , как Eval) ( решение
SRC / lib.js
И тогда в вашем основном коде вы можете вызывать ваши функции по имени, например:
main.js
Сделаю этот вывод
Обратите внимание на undefined, когда вы вызываете my object.funcFour () , это будет то же самое, если вы загрузите с помощью eval () . Надеюсь, поможет :)
источник
Я просто хочу добавить, что если вам нужны только определенные функции, импортированные из вашего tools.js , тогда вы можете использовать назначение деструктурирования, которое поддерживается в node.js начиная с версии 6.4 - см. Node.green .
Пример : (оба файла находятся в одной папке)
вывод:
true
Это также позволяет избежать назначения этих функций в качестве свойств другого объекта, как в следующем (общем) назначении:
const tools = require('./tools.js');
куда вам нужно позвонить
tools.isEven(10)
.НОТА:
Не забудьте указать префикс вашего имени файла с правильным путем - даже если оба файла находятся в одной папке, вам необходимо добавить префикс
./
Из документов Node.js :
источник
app.js
tools.js
источник
Включить файл и запустить его в заданном (неглобальном) контексте
fileToInclude.js
main.js
источник
Это лучший способ, который я создал до сих пор.
Вам все еще нужно сообщить, что вы хотите экспортировать
источник
Как у вас есть файл
abc.txt
и многое другое?Создайте 2 файла:
fileread.js
иfetchingfile.js
затемfileread.js
напишите этот код:В
fetchingfile.js
написать этот код:Теперь в терминале: $ node fetchingfile.js --file = abc.txt
Вы передаете имя файла в качестве аргумента, более того, включите все файлы в
readfile.js
вместо того, чтобы передавать его.Спасибо
источник
Вы можете просто
require('./filename')
.Например.
Обратите внимание, что:
источник
Я также искал возможность включить код без написания модулей, соответственно. использовать те же проверенные автономные источники из другого проекта для службы Node.js - и ответ jmparatte сделал это для меня.
Выгода в том, что вы не загрязняете пространство имен, у меня нет проблем,
"use strict";
и это работает хорошо.Вот полный образец:
Скрипт для загрузки - /lib/foo.js
SampleModule - index.js
Надеюсь, это было как-то полезно.
источник
Другой метод при использовании node.js и express.js framework
сохранить это в js-файле с именем s и в папке statics
Теперь использовать функцию
источник
Я придумал довольно грубый метод обработки этого для шаблонов HTML. Аналогично PHP
<?php include("navigation.html"); ?>
источник
Если вы хотите использовать преимущества нескольких процессоров и микросервисной архитектуры, чтобы ускорить процесс ... Используйте RPC вместо разветвленных процессов.
Звучит сложно, но это просто, если вы используете осьминога .
Вот пример:
на tools.js добавьте:
в app.js добавьте:
Раскрытие - я автор осьминога и создан для аналогичного варианта использования, так как не смог найти легких библиотек.
источник
Чтобы превратить «инструменты» в модуль, я не вижу ничего сложного. Несмотря на все остальные ответы, я все равно рекомендую использовать module.exports:
Теперь нам нужно назначить этот экспорт в глобальную область (в вашем приложении | index | server.js)
Теперь вы можете ссылаться и вызывать функцию как:
источник
Использование:
app.js:
источник
./tools.js