Как создать библиотеку javascript в отдельном файле и «включить» ее в другой? - PullRequest
16 голосов
/ 30 мая 2009

Во-первых, предостережение. Основной скрипт не запускается на веб-странице . Я буду запускать файл .js в Windows, используя Windows Script Host.

Проблема: Я хотел бы создать «библиотеку» javascript, содержащую несколько объектов, каждый из которых имеет множество функций. Я ожидаю, что эта библиотека со временем станет достаточно большой и хотела бы сохранить ее в отдельном файле javascript (назовем ее Library.js ). Я хотел бы получить доступ к объектам из Library.js из другого скрипта (назовем его User.js ).

По сути, я ищу что-то похожее на C / C ++ "включить" парадигму.

Есть ли способ реализовать это в javascript? (Помните, это не веб-интерфейс)

Ответы [ 4 ]

20 голосов
/ 30 мая 2009

Эта страница прямо здесь самая близкая, которую я мог найти. В нем говорится о файлах .wsf, которые позволяют объединять несколько сценариев (которые могут быть написаны на разных языках) в одном файле.

По вашему вопросу это должно быть что-то вроде:

user.wsf

<job id="IncludeExample">
   <script language="JScript" src="library.js"/>
   <script language="JScript">
      <![CDATA[
      // use your library functions here
      ]]>
   </script>
</job>

Возможно, есть лучшие способы, но я не эксперт WSH.

13 голосов
/ 29 апреля 2011

Я знаю, что это старый вопрос, и на него ответили и приняли.

Я знаю о файлах .WSF и о том, как они работают; они служат цели.

Тем не менее, я также счел удобным сделать «включение» из чистого файла .js, который работает в WSH. Вот мое решение для этого.

    function includeFile (filename) {
        var fso = new ActiveXObject ("Scripting.FileSystemObject");
        var fileStream = fso.openTextFile (filename);
        var fileData = fileStream.readAll();
        fileStream.Close();
        eval(fileData);
    }

Определив эту служебную функцию, я могу сделать это из модуля javascript:

includeFile("externalFile1.js");
includeFile("externalFile2.js");
includeFile("etc.js");

... и тогда я могу вызвать любую из функций или вызвать любую из переменных, определенных в этих модулях.

Аналогичная техника работает с файлами .vbs:
Как включить общий файл в VBScript (аналогично C #include)?

1 голос
/ 30 мая 2009

Вы можете достичь своей цели, используя Windows Scripting Host вместо конкретного файла .js или .vbs. Дополнительную информацию можно найти на сайте MSDN .

Из ссылки:

Файл сценария Windows (* .wsf) представляет собой текст документ, содержащий расширяемую разметку Код языка (XML). Включает в себя несколько функций, которые предлагают вам повышенная гибкость сценариев. Поскольку файлы сценариев Windows не являются для конкретного двигателя они могут содержать скрипт из любого скрипта Windows совместимый скриптовый движок. Они действуют как контейнер.

Вы бы назвали файл, используя тот же синтаксис, что и файлы .js и .vbs:

wscript.exe myScriptFile.wsf

ОБНОВЛЕНО: Исправление отмечено ...

0 голосов
/ 30 мая 2009

Может быть, эта реализация phpjs может помочь.

http://phpjs.org/functions/include:433

...