Как я могу создать библиотеку javascript в отдельном файле и включить ее в другой?

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

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

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

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


person Community    schedule 29.05.2009    source источник
comment
Вот аналогичный вопрос: stackoverflow.com/questions/316166/   -  person Helen    schedule 15.07.2009


Ответы (3)


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

Для вашего вопроса это должно быть что-то вроде:

user.wsf

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

Могут быть лучшие способы, но я не эксперт WSH.

person Ionuț G. Stan    schedule 29.05.2009

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

Я знаю о файлах .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)?

person Cheeso    schedule 29.04.2011
comment
Я попробовал эту функцию includeFile, но, к сожалению, eval внутри этой функции не действует на остальную часть файла. Похоже, что eval работает только внутри функции и не имеет глобального эффекта. Мне пришлось сделать что-то вроде: eval(includeFile(something.js)); Где includeFile возвращает значение fileData (return fileData). - person MrHIDEn; 19.11.2013

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

Из ссылки:

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

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

wscript.exe myScriptFile.wsf

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

person Dscoduc    schedule 29.05.2009
comment
Хостом сценария является либо cscript.exe, либо wscript.exe, а не vbscript.exe. - person Helen; 15.07.2009