0.4.3 • Published 8 years ago

scmod v0.4.3

Weekly downloads
318
License
-
Repository
github
Last release
8 years ago

SCMOD - javascript modules

web сервис для написания javascript кода в модульном стиле

Предисловие

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

Появилась идея сделать менеджер js-файлов в виде веб сервиса. Сервису указываем корневой модуль, а он формирует список файлов и отдает js код для подключения этих файлов через прокси который оборачивает исходник в функцию(своя область видимости).

Описание json структуры модуля.

модуль описывается файлом в формате json или yaml

пример модуля - http://zzreader.com/src/cmps/cmps.moon_frame.json

{
    "modules": {
        "core": "../core/core.json",
        "cram": "./lib.cram.json",
        "xhr_send": "../core/xhr_send.json",
        "_zmenu": "./cmps.zmenu.json",


        "elems": "global:elems",
        "tmpl": "global:tmpl"

    },

    "styles": [
        "./cmps.moon_frame.css"
    ],

    "scripts": [
        "./cmps.moon_frame.tmpl.js",
        "./cmps.moon_frame.js"
    ]
}

свойство "modules" - ассоциативный массив требуемых модулей

список записей "ключ: занчение"

ключ должен удовлетворять условию наименования переменных в javascript. если имя ключа начинается с символа "_" , то такой модуль подключается но не передается в модуль как переменная.

значение может быть - url | "global:global_name" | true | false | object

  • url - может быть относительным или абсолютным. потдерживается два протокола http и https
  • global:global_name - префикс "global:" позволяет создавть глобальные обьекты
  • true - в модуль будет передано значение false. var ключ=true;
  • false - в модуль будет передано значение false. var ключ=false;
  • object - в модуль будет передан указанный обьект. var ключ={... };

свойство "styles" - массив url адресов css файлов модуля.

свойство "scripts" - массив url адресов js файлов модуля.

каждый js-файл будет завернут в свою облость видимости. В которую будут переданы переменные модулей указанных в разделе "modules"

__MODULE(2, function(global,module,core,cram,xhr_send,elems,tmpl){'use strict';
    ... код js файла ...
return [global,module,core,cram,xhr_send,elems,tmpl]});

в каждом js-файле будет обьявлена переменная "module", (var module = {}). И любой js-файл может изменить значение этой переменной.

свойство "alias" - изменяет имя переменной "module"

{
    "alias": "feed",
    ...
}
__MODULE(2, function(global,feed,...
    ... код js файла ...

    return [global,feed,... ];
});

свойство "nowrap" - для js файлов можно отключить оборачивание в область видимости. js-файлы будут подключенны без изменений как они есть.

{
    "nowrap": true,
    "scripts": [
        , "... "
    ],
    ...
}

свойство "langs" - для автоматического перевода текстовых значений в js-файле во время компиляции

заменяются только значения в двойных кавычках

{
    ... ,

    "langs": {
        "текст который требует перевода": {
            "ru": "текст перевода",
            "en": "the translation",
            "vn": "bản dịch",
            ....
        },
        ......
    }
}

свойство "autokye" - префикс для перевода в "ключи-локализации"

{
    "autokey": "mypage" ,

    "langs": {
        "текст который требует перевода": {
            "key": ".textTranslation",
            ....
        },
        ......
    }
}

свойство "replace" - функционал для подмены адреса

по таблице можно поменять одни адреса другими. К примеру глобальный на локальные

{
    ... ,

    "replace": {
        "http://aaaaa.aa/xxxx.json": "./deps/aaaaa/xxxx.json",
        ......
    }
}

Описание возможностей web-сервиса "scmod"

для демонстрации сервис развернут по адресу http://scmod.vflash.ru/

###режим разработки:###

метод /sandbox - генерирует js файл для разработки

пример - http://scmod.vflash.ru/sandbox?src=http://zzreader.com/src/zzreader/feedreader.json

- src - абсолютный путь до корневого модуля.
- auth=base - если требуется http-authentication. логин и пароль передается только указанные в настройках сервера
- rep - разрешает подмену адрисов. значение true|false|url
- core - адрес ядра, все модули ядра будут исключены из сборки. значение [url]

пример применения

<html>
    <head>
        <script src="http://scmod.vflash.ru/sandbox?src=http://zzreader.com/src/zzreader/feedreader.json"></script>
        <noscript>
            <link rel="stylesheet" href="http://scmod.vflash.ru/sandbox_styles?src=http://zzreader.com/src/zzreader/feedreader.json" type="text/css" />
        </noscript>

    </head>
    <body> ... </body>
</html>

метод /langs - генерирует список локализации

пример - http://scmod.vflash.ru/langs?for=en,de&src=http://zzreader.com/src/zzreader/feedreader.json

- src - абсолютный путь до корневого модуля.
- auth=base - если требуется http-authentication. логин и пароль передается только доменаям указанным в настройках сервера
- for - указанные через через запятую языки для которых нужно искать перевод
- rep - разрешает подмену адресов. значение [true|false|url]
- core - адрес ядра, все модули ядра будут исключены из сборки. значение [url]
- autokey - включает вид полного ключа-локализации
- pure - не отображает протухшие значения
- all - выводит значения всех модулей
- all=ru - выводит с фильтром кирилицы
- yaml - вывод в формате yaml

###режим сборки:###

метод /scripts - обьединяет все js-файлы в один

пример - http://scmod.vflash.ru/scripts?lang=en&src=http://zzreader.com/src/zzreader/feedreader.json

- src - абсолютный путь до корневого модуля.
- auth=base - если требуется http-authentication. логин и пароль передается только указанные в настройках сервера
- lang - все текстовые значения в js файлах обрамленные в "двойные кавычки" будут заменены на соответствующие указанные с свойстве модуля "langs"
- rep - разрешает подмену адресов. значение [true|false|url]
- core - адрес ядра, все модули ядра будут исключены из сборки. значение [url]

метод /styles - обьединяет все css-файлы в один

пример - http://scmod.vflash.ru/styles?src=http://zzreader.com/src/zzreader/feedreader.json

- src - абсолютный путь до корневого модуля.
- auth=base - если требуется http-authentication. логин и пароль передается только указанные в настройках сервера
- min=false - чтобы отключить минификатор css
- rep - разрешает подмену адресов. значение [true|false|url]
- core - адрес ядра, все модули ядра будут исключены из сборки. значение [url]

###режим консоли:###

scmod-scripts -3 -lang=en ./side-zzreader/src/zzreader/feedreader.json
scmod-styles -3 ./side-zzreader/src/zzreader/feedreader.json
scmod-langs -for=en,ru,de ./side-zzreader/src/zzreader/feedreader.json

команда scmod-scripts - компилирует все скрипты в один файл команда scmod-styles - компилирует все css-стили в один файл команда scmod-langs - формирует список строк для локализации

параметр -for=SS задает ключи локализации для команды scmod-langs параметр -lang=SS указывает ключ локализации для команды scmod-scripts параметр -1..9 задает адрес корневого каталога относительно указанного модуля параметр -max выдача будет без сжатия кода параметр -rep разрешает подмену адресов. матрица должна быть указанна в корневом модуле параметр -rep=/src/deps/replace.json разрешает подмену адресов. матрица расположена в файле параметр -core=/src/deps/zcore/zcore.json адрес ядра, все модули ядра будут исключены из сборки

Установка scmod сервера

проше всего установить через npm

[sudo] npm -g install scmod

после нужно скопировать файл настройки сервиса scmod

[sudo] cp /usr/local/lib/node_modules/scmod/config-sample.js  /usr/local/etc/scmod/config.js

правим настройки под себя

для Ubuntu подготовлен файл upstart

[sudo] cp /usr/local/lib/node_modules/scmod/scmod.conf /etc/init/scmod.conf
[sudo] start scmod

для других ОС можно воспользоватья forever

[sudo] npm install forever -g
[sudo] forever start /usr/local/lib/node_modules/scmod/index.js

Настройка nginx

server {
    listen   80;
    server_name  scmod.vflash.ru;
    access_log  /var/log/nginx/scmod.access.log;

    location / {
        proxy_pass http://127.0.0.1:1777/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP  $remote_addr;
    }
}

если нет возможности выделить отдельный домен то нужно будет указать дополнительные заголовки

# vflash.ru/scmod/sandbox?src=http://zzreader.com/src/zzreader/feedreader.json

location /scmod/ {
    proxy_pass http://127.0.0.1:1777/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP  $remote_addr;

    proxy_set_header X-SCMOD-HOST  $scheme://$host/scmod;
}

Планы на будующее

  • Возможность компиляции из консоли
  • Выделять островки кода и общей части. Для компиляции не в один, а несколько файлов.
  • Дать возможность указывать зависимости непосредственно в js-файле. Используя конструкции вида:
import '../core/core.json' as core;

var xx = ...;
...
0.4.3

8 years ago

0.4.2

8 years ago

0.4.1

9 years ago

0.3.9

9 years ago

0.3.8

9 years ago

0.3.7

9 years ago

0.3.6

9 years ago

0.3.5

9 years ago

0.3.4

9 years ago

0.3.3

9 years ago

0.3.2

9 years ago

0.3.1

9 years ago

0.2.38

9 years ago

0.2.37

9 years ago

0.2.36

9 years ago

0.2.35

9 years ago

0.2.34

9 years ago

0.2.33

9 years ago

0.2.32

9 years ago

0.2.31

9 years ago

0.2.30

9 years ago

0.2.29

10 years ago

0.2.28

10 years ago

0.2.27

10 years ago

0.2.26

10 years ago

0.2.25

10 years ago

0.2.24

10 years ago

0.2.23

10 years ago

0.2.22

10 years ago

0.2.21

10 years ago

0.2.20

10 years ago

0.2.19

10 years ago

0.2.18

10 years ago

0.2.17

10 years ago

0.2.16

10 years ago

0.2.15

11 years ago

0.2.14

11 years ago

0.2.13

11 years ago

0.2.12

11 years ago

0.2.11

11 years ago

0.2.10

11 years ago

0.2.9

11 years ago

0.2.8

11 years ago

0.2.7

11 years ago

0.2.6

11 years ago

0.2.5

11 years ago

0.2.4

11 years ago

0.2.3

11 years ago

0.2.2

11 years ago

0.2.1

11 years ago

0.1.27

11 years ago

0.1.26

11 years ago

0.1.25

11 years ago

0.1.24

11 years ago

0.1.23

11 years ago

0.1.22

11 years ago

0.1.21

11 years ago

0.1.20

11 years ago

0.1.19

11 years ago

0.1.18

11 years ago

0.1.17

11 years ago

0.1.16

11 years ago

0.1.15

11 years ago

0.1.14

11 years ago

0.1.13

12 years ago

0.1.12

12 years ago

0.1.11

12 years ago

0.1.10

12 years ago

0.1.9

12 years ago

0.1.8

12 years ago

0.1.7

12 years ago

0.1.6

12 years ago

0.1.5

12 years ago

0.1.4

12 years ago

0.1.3

12 years ago

0.1.2

12 years ago

0.1.1

12 years ago

0.1.0

12 years ago