2009-05-29 2 views
16

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

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

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

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

+1

Вот аналогичный вопрос: http://stackoverflow.com/questions/316166/how-do-i-include-a-common-file- in-vbscript-like-to-c-include – Helen

ответ

19

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

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

user.wsf

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

Там могут быть более эффективные способы, но я не эксперт по WSH.

+0

Geesh ... Ударьте меня на ответ .... ;-) – Dscoduc

1

Вы можете достичь своей цели с помощью Windows Scripting Host вместо определенного .js или .vbs файла. Более подробную информацию можно найти по адресу: the MSDN site.

Из ссылки:

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

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

wscript.exe myScriptFile.wsf

ОБНОВЛЕНО: Коррекция отметила ...

+0

Хост сценария - либо cscript.exe, либо wscript.exe, а не vbscript.exe. – Helen

13

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

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

С этой функцией полезности определена, я могу сделать это изнутри яваскрипт модуля:

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

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

Аналогичный метод работает с .vbs файлы:
How do I include a common file in VBScript (similar to C#include)?

+0

+1 для ссылки на http://stackoverflow.com/questions/316166 – 0xC0000022L

+3

Я пробовал эту функцию 'includeFile', но, к сожалению,' eval' внутри этой функции не имеет эффекта для остальной части файла. Похоже, что 'eval' работает только внутри функции и не имеет глобального эффекта. Мне нужно было сделать что-то вроде: eval (includeFile («something.js»)); Где 'includeFile' возвращает значение' fileData' (return fileData). – MrHIDEn