annotate xml/ru/docs/njs/node_modules.xml @ 2592:fca42223b9fc

Fixed example in the "Using node modules with njs" article.
author Vladimir Homutov <vl@nginx.com>
date Fri, 11 Sep 2020 15:46:11 +0300
parents 67fd664e2612
children 5cd72684e5b8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1 <?xml version="1.0"?>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
2
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
3 <!--
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
4 Copyright (C) Nginx, Inc.
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
5 -->
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
6
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
7 <!DOCTYPE article SYSTEM "../../../../dtd/article.dtd">
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
8
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
9 <article name="Использование модулей Node.js в njs"
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
10 link="/ru/docs/njs/node_modules.html"
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
11 lang="en"
2592
fca42223b9fc Fixed example in the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents: 2577
diff changeset
12 rev="5">
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
13
2576
4c8d0b37932d Corrected syntax and style of "Using node modules with njs".
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2489
diff changeset
14 <section id="intro">
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
15
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
16 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
17 Часто разработчику приходится использовать сторонний код и,
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
18 как правило, такой код доступен в виде библиотеки.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
19 В JavaScript концепция модулей является новой и
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
20 до недавнего времени не была стандартизированa.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
21 До сих пор множество платформ или браузеров не поддерживают модули,
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
22 по этой причине практически невозможно повторно использовать код.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
23 В данной статье приводятся способы повторного использования
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
24 кода в njs при помощи <link url="https://nodejs.org/">Node.js</link>.
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
25 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
26
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
27 <note>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
28 В примерах статьи используется функциональность
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
29 <link doc="index.xml">njs</link>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
30 <link doc="changes.xml" id="njs0.3.8">0.3.8</link>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
31 </note>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
32
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
33 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
34 При добавлении стороннего кода в njs
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
35 может возникнуть несколько проблем:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
36
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
37 <list type="bullet">
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
38
2576
4c8d0b37932d Corrected syntax and style of "Using node modules with njs".
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2489
diff changeset
39 <listitem>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
40 большое количество файлов, ссылающихся друг на друга, и их зависимости
2576
4c8d0b37932d Corrected syntax and style of "Using node modules with njs".
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2489
diff changeset
41 </listitem>
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
42
2576
4c8d0b37932d Corrected syntax and style of "Using node modules with njs".
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2489
diff changeset
43 <listitem>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
44 платформозависимые API
2576
4c8d0b37932d Corrected syntax and style of "Using node modules with njs".
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2489
diff changeset
45 </listitem>
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
46
2576
4c8d0b37932d Corrected syntax and style of "Using node modules with njs".
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2489
diff changeset
47 <listitem>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
48 языковые конструкции нового стандарта
2576
4c8d0b37932d Corrected syntax and style of "Using node modules with njs".
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2489
diff changeset
49 </listitem>
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
50
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
51 </list>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
52 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
53
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
54 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
55 Однако это не является чем-то новым или специфичным для njs.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
56 Разработчикам JavaScript приходится часто иметь дело с подобными случаями,
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
57 например при поддержке нескольких несхожих платформ
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
58 с разными свойствами.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
59 Данные проблемы можно разрешить при помощи следующих инструментов:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
60
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
61 <list type="bullet">
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
62
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
63 <listitem>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
64 Большое количество файлов, ссылающихся друг на друга, и их зависимости
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
65 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
66 Решение: слияние всего независимого кода в один файл.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
67 Для этих целей могут использоваться утилиты
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
68 <link url="http://browserify.org/">browserify</link> или
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
69 <link url="https://webpack.js.org/">webpack</link>,
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
70 позволяющие преобразовать проект в один файл, содержащий
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
71 код и все зависимости.
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
72 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
73 </listitem>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
74
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
75 <listitem>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
76 Платформозависимые API
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
77 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
78 Решение: использование библиотек, реализующих подобные API
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
79 в платформонезависимом режиме, однако в ущерб производительности.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
80 Определённая функциональность может быть также реализована при помощи
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
81 <link url="https://polyfill.io/v3/">polyfill</link>.
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
82 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
83 </listitem>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
84
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
85 <listitem>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
86 Языковые конструкции нового стандарта
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
87 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
88 Решение: трансплирование кода&mdash;
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
89 ряд преобразований,
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
90 заменяющих новые функции языка в соответствии со старым стандартом.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
91 Для этих целей может использоваться
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
92 <link url="https://babeljs.io/"> babel</link>.
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
93 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
94 </listitem>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
95
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
96 </list>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
97 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
98
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
99 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
100 В статье также используются две относительно большие
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
101 библиотеки на основе npm:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
102
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
103 <list type="bullet">
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
104
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
105 <listitem>
2576
4c8d0b37932d Corrected syntax and style of "Using node modules with njs".
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2489
diff changeset
106 <link url="https://www.npmjs.com/package/protobufjs">protobufjs</link>&mdash;
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
107 библиотека для создания и парсинга protobuf-сообщений, используемая
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
108 протоколом <link url="https://grpc.io/">gRPC</link>
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
109 </listitem>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
110
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
111 <listitem>
2576
4c8d0b37932d Corrected syntax and style of "Using node modules with njs".
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2489
diff changeset
112 <link url="https://www.npmjs.com/package/dns-packet">dns-packet</link>&mdash;
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
113 библиотека для обработки пакетов протокола DNS
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
114 </listitem>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
115
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
116 </list>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
117 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
118
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
119 </section>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
120
2576
4c8d0b37932d Corrected syntax and style of "Using node modules with njs".
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2489
diff changeset
121
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
122 <section id="environment" name="Окружение">
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
123
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
124 <para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
125 <note>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
126 В статье описываются общие принципы работы
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
127 и не ставится цель описания подробных сценариев работы с Node.js
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
128 и JavaScript.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
129 Перед выполнением команд
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
130 необходимо ознакомиться с документацией соответствующих пакетов.
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
131 </note>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
132 Сначала, предварительно установив и запустив Node.js, необходимо создать
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
133 пустой проект и установить зависимости;
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
134 для выполнения нижеперечисленных команд необходимо
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
135 находиться в рабочем каталоге:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
136 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
137 $ mkdir my_project &amp;&amp; cd my_project
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
138 $ npx license choose_your_license_here > LICENSE
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
139 $ npx gitignore node
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
140
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
141 $ cat &gt; package.json &lt;&lt;EOF
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
142 {
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
143 "name": "foobar",
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
144 "version": "0.0.1",
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
145 "description": "",
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
146 "main": "index.js",
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
147 "keywords": [],
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
148 "author": "somename &lt;some.email@example.com&gt; (https://example.com)",
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
149 "license": "some_license_here",
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
150 "private": true,
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
151 "scripts": {
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
152 "test": "echo \"Error: no test specified\" &amp;&amp; exit 1"
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
153 }
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
154 }
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
155 EOF
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
156 $ npm init -y
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
157 $ npm install browserify
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
158 </example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
159 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
160
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
161 </section>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
162
2576
4c8d0b37932d Corrected syntax and style of "Using node modules with njs".
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2489
diff changeset
163
2481
8ed243471444 Typos fixed.
Vladimir Homutov <vl@nginx.com>
parents: 2480
diff changeset
164 <section id="protobuf" name="Protobufjs">
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
165
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
166 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
167 Библиотека предоставляет парсер
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
168 для определения интерфейса <literal>.proto</literal>,
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
169 а также генератор кода для парсинга и генерации сообщений.
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
170 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
171
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
172 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
173 В данном примере используется
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
174 файл
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
175 <link url="https://github.com/grpc/grpc/blob/master/examples/protos/helloworld.proto">helloworld.proto</link>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
176 из примеров gRPC.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
177 Целью является создание двух сообщений:
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
178 <literal>HelloRequest</literal> и
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
179 <literal>HelloResponse</literal>.
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
180 Также используется
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
181 <link url="https://github.com/protobufjs/protobuf.js/blob/master/README.md#reflection-vs-static-code">статический</link>
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
182 режим protobufjs вместо динамически генерируемых классов, так как
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
183 njs не поддерживает динамическое добавление новых функций
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
184 из соображений безопасности.
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
185 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
186
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
187 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
188 Затем устанавливается библиотека,
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
189 из определения протокола генерируется код JavaScript,
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
190 реализующий маршалинг сообщений:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
191 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
192 $ npm install protobufjs
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
193 $ npx pbjs -t static-module helloworld.proto > static.js
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
194 </example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
195 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
196
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
197 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
198 Таким образом файл <literal>static.js</literal> становится новой зависимостью,
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
199 хранящей необходимый код для реализации обработки сообщений.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
200 Функция <literal>set_buffer()</literal> содержит код, использующий
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
201 библиотеку для создания буфера с сериализованным
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
202 сообщением <literal>HelloRequest</literal>.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
203 Код находится в файле <literal>code.js</literal>:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
204 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
205 var pb = require('./static.js');
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
206
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
207 // Пример использования библиотеки protobuf: подготовка буфера к отправке
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
208 function set_buffer(pb)
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
209 {
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
210 // назначение полей gRPC payload
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
211 var payload = { name: "TestString" };
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
212
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
213 // создание объекта
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
214 var message = pb.helloworld.HelloRequest.create(payload);
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
215
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
216 // сериализация объекта в буфер
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
217 var buffer = pb.helloworld.HelloRequest.encode(message).finish();
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
218
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
219 var n = buffer.length;
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
220
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
221 var frame = new Uint8Array(5 + buffer.length);
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
222
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
223 frame[0] = 0; // флаг 'compressed'
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
224 frame[1] = (n &amp; 0xFF000000) &gt;&gt;&gt; 24; // длина: uint32 в сетевом порядке байт
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
225 frame[2] = (n &amp; 0x00FF0000) &gt;&gt;&gt; 16;
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
226 frame[3] = (n &amp; 0x0000FF00) &gt;&gt;&gt; 8;
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
227 frame[4] = (n &amp; 0x000000FF) &gt;&gt;&gt; 0;
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
228
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
229 frame.set(buffer, 5);
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
230
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
231 return frame;
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
232 }
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
233
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
234 var frame = set_buffer(pb);
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
235 </example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
236 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
237
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
238 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
239 Для проверки работоспособности необходимо выполнить код при помощи node:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
240 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
241 $ node ./code.js
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
242 Uint8Array [
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
243 0, 0, 0, 0, 12, 10,
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
244 10, 84, 101, 115, 116, 83,
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
245 116, 114, 105, 110, 103
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
246 ]
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
247 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
248 Результатом является закодированный фрейм <literal>gRPC</literal>.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
249 Теперь фрейм можно запустить с njs:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
250 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
251 $ njs ./code.js
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
252 Thrown:
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
253 Error: Cannot find module "./static.js"
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
254 at require (native)
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
255 at main (native)
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
256 </example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
257 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
258
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
259 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
260 Так как модули не поддерживаются, то операция завершается получением исключения.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
261 В этом случае можно использовать утилиту <literal>browserify</literal>
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
262 или другую подобную утилиту.
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
263 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
264
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
265 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
266 Попытка обработки файла <literal>code.js</literal> завершится
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
267 большим количеством JS-кода, который предполагается запускать в браузере,
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
268 то есть сразу после загрузки.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
269 Однако необходимо получить другой результат&mdash;
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
270 экспортируемую функцию, на которую
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
271 можно сослаться из конфигурации nginx.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
272 Для этого потребуется создание кода-обёртки.
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
273 <note>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
274 В целях упрощения в примерах данной статьи
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
275 используется <link doc="cli.xml">интерфейс комадной строки</link> njs.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
276 На практике для запуска кода обычно используется njs-модуль для nginx.
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
277 </note>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
278 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
279
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
280 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
281 Файл <literal>load.js</literal> содержит код, загружающий библиотеку,
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
282 храняющую дескриптор в глобальном пространстве имён:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
283 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
284 global.hello = require('./static.js');
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
285 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
286 Данный код будет заменён объединённым содержимым.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
287 Код будет использовать дескриптор "<literal>global.hello</literal>" для доступа
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
288 к библиотеке.
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
289 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
290
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
291 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
292 Затем для получения всех зависимостей в один файл
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
293 код обрабатыается утилитой <literal>browserify</literal>:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
294 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
295 $ npx browserify load.js -o bundle.js -d
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
296 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
297 В результате генерируется объёмный файл, содержащий все зависимости:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
298 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
299 (function(){function......
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
300 ...
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
301 ...
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
302 },{"protobufjs/minimal":9}]},{},[1])
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
303 //# sourceMappingURL..............
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
304 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
305 Для получения результирующего файла "<literal>njs_bundle.js</literal>"
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
306 необходимо объединить "<literal>bundle.js</literal>" и следующий код:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
307 <example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
308 // Пример использования библиотеки protobuf: подготовка буфера к отправке
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
309 function set_buffer(pb)
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
310 {
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
311 // назначение полей gRPC payload
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
312 var payload = { name: "TestString" };
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
313
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
314 // создание объекта
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
315 var message = pb.helloworld.HelloRequest.create(payload);
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
316
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
317 // сериализация объекта в буфер
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
318 var buffer = pb.helloworld.HelloRequest.encode(message).finish();
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
319
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
320 var n = buffer.length;
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
321
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
322 var frame = new Uint8Array(5 + buffer.length);
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
323
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
324 frame[0] = 0; // флаг 'compressed'
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
325 frame[1] = (n &amp; 0xFF000000) &gt;&gt;&gt; 24; // длина: uint32 в сетевом порядке байт
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
326 frame[2] = (n &amp; 0x00FF0000) &gt;&gt;&gt; 16;
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
327 frame[3] = (n &amp; 0x0000FF00) &gt;&gt;&gt; 8;
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
328 frame[4] = (n &amp; 0x000000FF) &gt;&gt;&gt; 0;
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
329
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
330 frame.set(buffer, 5);
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
331
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
332 return frame;
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
333 }
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
334
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
335 // функции, вызываемые снаружи
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
336 function setbuf()
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
337 {
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
338 return set_buffer(global.hello);
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
339 }
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
340
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
341 // вызов кода
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
342 var frame = setbuf();
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
343 console.log(frame);
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
344 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
345 Для проверки работоспособности необходимо запустить файл при помощи node:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
346 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
347 $ node ./njs_bundle.js
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
348 Uint8Array [
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
349 0, 0, 0, 0, 12, 10,
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
350 10, 84, 101, 115, 116, 83,
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
351 116, 114, 105, 110, 103
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
352 ]
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
353 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
354 Дальнейшие шаги выполняются при помощи njs:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
355 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
356 $ /njs ./njs_bundle.js
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
357 Uint8Array [0,0,0,0,12,10,10,84,101,115,116,83,116,114,105,110,103]
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
358 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
359 Теперь необходимо задействовать njs API для преобразования
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
360 массива в байтовую строку для дальнейшего использования модулем nginx.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
361 Данный код необходимо добавить перед последней строкой:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
362 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
363 if (global.njs) {
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
364 return String.bytesFrom(frame)
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
365 }
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
366 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
367 Проверка работоспособности:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
368 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
369 $ njs ./njs_bundle.js |hexdump -C
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
370 00000000 00 00 00 00 0c 0a 0a 54 65 73 74 53 74 72 69 6e |.......TestStrin|
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
371 00000010 67 0a |g.|
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
372 00000012
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
373 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
374 Экспортируемая функция получена.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
375 Парсинг ответа может быть сделан аналогичным способом:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
376 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
377 function parse_msg(pb, msg)
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
378 {
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
379 // преобразование байтовой строки в массив целых чисел
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
380 var bytes = msg.split('').map(v=>v.charCodeAt(0));
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
381
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
382 if (bytes.length &lt; 5) {
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
383 throw 'message too short';
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
384 }
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
385
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
386 // первые 5 байт являются фреймом gRPC (сжатие + длина)
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
387 var head = bytes.splice(0, 5);
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
388
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
389 // проверка правильной длины сообщения
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
390 var len = (head[1] &lt;&lt; 24)
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
391 + (head[2] &lt;&lt; 16)
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
392 + (head[3] &lt;&lt; 8)
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
393 + head[4];
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
394
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
395 if (len != bytes.length) {
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
396 throw 'header length mismatch';
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
397 }
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
398
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
399 // вызов protobufjs для декодирования сообщения
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
400 var response = pb.helloworld.HelloReply.decode(bytes);
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
401
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
402 console.log('Reply is:' + response.message);
2489
bda080989b6c Fixed indentation and braces in njs example.
Vladimir Homutov <vl@nginx.com>
parents: 2481
diff changeset
403 }
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
404 </example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
405 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
406
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
407 </section>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
408
2576
4c8d0b37932d Corrected syntax and style of "Using node modules with njs".
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2489
diff changeset
409
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
410 <section id="dnspacket" name="Пакет DNS">
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
411
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
412 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
413 В примере используется библиотека для создания и парсинга пакетов DNS.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
414 Эта библиотека, а также её зависимости,
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
415 использует современные языковые конструкции, не поддерживаемые в njs.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
416 Для поддержки таких конструкций
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
417 потребуется дополнительный шаг: транспилирование исходного кода.
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
418 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
419
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
420 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
421 Необходимо установить дополнительные пакеты node:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
422 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
423 $ npm install @babel/core @babel/cli @babel/preset-env babel-loader
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
424 $ npm install webpack webpack-cli
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
425 $ npm install buffer
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
426 $ npm install dns-packet
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
427 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
428 Файл конфигурации webpack.config.js:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
429 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
430 const path = require('path');
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
431
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
432 module.exports = {
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
433 entry: './load.js',
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
434 mode: 'production',
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
435 output: {
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
436 filename: 'wp_out.js',
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
437 path: path.resolve(__dirname, 'dist'),
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
438 },
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
439 optimization: {
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
440 minimize: false
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
441 },
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
442 node: {
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
443 global: true,
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
444 },
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
445 module : {
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
446 rules: [{
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
447 test: /\.m?js$$/,
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
448 exclude: /(bower_components)/,
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
449 use: {
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
450 loader: 'babel-loader',
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
451 options: {
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
452 presets: ['@babel/preset-env']
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
453 }
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
454 }
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
455 }]
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
456 }
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
457 };
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
458 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
459 В данном случае используется режим "<literal>production</literal>".
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
460 Конструкция "<literal>eval</literal>" не используется, так как
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
461 не поддерживается njs.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
462 Точкой входа является файл <literal>load.js</literal>:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
463 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
464 global.dns = require('dns-packet')
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
465 global.Buffer = require('buffer/').Buffer
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
466 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
467 Сначала необходимо создать единый файл для библиотек, как в предыдущих примерах:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
468 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
469 $ npx browserify load.js -o bundle.js -d
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
470 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
471 Затем необходимо обработать утилитой webpack, что также запускает babel:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
472 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
473 $ npx webpack --config webpack.config.js
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
474 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
475 Команда создаёт файл <literal>dist/wp_out.js</literal>, являющийся
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
476 трансплицированной версией <literal>bundle.js</literal>.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
477 Далее необходимо объединить этот файл с <literal>code.js</literal>,
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
478 хранящим код:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
479 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
480 function set_buffer(dnsPacket)
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
481 {
2489
bda080989b6c Fixed indentation and braces in njs example.
Vladimir Homutov <vl@nginx.com>
parents: 2481
diff changeset
482 // create DNS packet bytes
bda080989b6c Fixed indentation and braces in njs example.
Vladimir Homutov <vl@nginx.com>
parents: 2481
diff changeset
483 var buf = dnsPacket.encode({
bda080989b6c Fixed indentation and braces in njs example.
Vladimir Homutov <vl@nginx.com>
parents: 2481
diff changeset
484 type: 'query',
bda080989b6c Fixed indentation and braces in njs example.
Vladimir Homutov <vl@nginx.com>
parents: 2481
diff changeset
485 id: 1,
bda080989b6c Fixed indentation and braces in njs example.
Vladimir Homutov <vl@nginx.com>
parents: 2481
diff changeset
486 flags: dnsPacket.RECURSION_DESIRED,
bda080989b6c Fixed indentation and braces in njs example.
Vladimir Homutov <vl@nginx.com>
parents: 2481
diff changeset
487 questions: [{
bda080989b6c Fixed indentation and braces in njs example.
Vladimir Homutov <vl@nginx.com>
parents: 2481
diff changeset
488 type: 'A',
bda080989b6c Fixed indentation and braces in njs example.
Vladimir Homutov <vl@nginx.com>
parents: 2481
diff changeset
489 name: 'google.com'
bda080989b6c Fixed indentation and braces in njs example.
Vladimir Homutov <vl@nginx.com>
parents: 2481
diff changeset
490 }]
bda080989b6c Fixed indentation and braces in njs example.
Vladimir Homutov <vl@nginx.com>
parents: 2481
diff changeset
491 })
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
492
2489
bda080989b6c Fixed indentation and braces in njs example.
Vladimir Homutov <vl@nginx.com>
parents: 2481
diff changeset
493 return buf;
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
494 }
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
495 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
496 В данном примере генерируемый код не обёрнут в функцию,
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
497 явного вызова не требуется.
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
498 Результат доступен в каталоге "<literal>dist</literal>":
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
499 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
500 $ cat dist/wp_out.js code.js > njs_dns_bundle.js
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
501 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
502 Далее осуществляется вызов кода в конце файла:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
503 <example>
2592
fca42223b9fc Fixed example in the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents: 2577
diff changeset
504 var b = set_buffer(global.dns);
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
505 console.log(b);
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
506 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
507 И затем выполнение кода при помощи node:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
508 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
509 $ node ./njs_dns_bundle_final.js
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
510 Buffer [Uint8Array] [
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
511 0, 1, 1, 0, 0, 1, 0, 0,
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
512 0, 0, 0, 0, 6, 103, 111, 111,
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
513 103, 108, 101, 3, 99, 111, 109, 0,
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
514 0, 1, 0, 1
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
515 ]
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
516 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
517 Тестирование и запуск кода вместе с njs:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
518 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
519 $ njs ./njs_dns_bundle_final.js
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
520 Uint8Array [0,1,1,0,0,1,0,0,0,0,0,0,6,103,111,111,103,108,101,3,99,111,109,0,0,1,0,1]
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
521 </example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
522 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
523
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
524 <para>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
525 Ответ можно распарсить следующим способом:
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
526 <example>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
527 function parse_response(buf)
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
528 {
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
529 var bytes = buf.split('').map(v=>v.charCodeAt(0));
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
530
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
531 var b = global.Buffer.from(bytes);
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
532
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
533 var packet = dnsPacket.decode(b);
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
534
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
535 var resolved_name = packet.answers[0].name;
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
536
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
537 // ожидаемое имя 'google.com', согласно запросу выше
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
538 }
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
539 </example>
2577
67fd664e2612 Translated "Using node modules with njs" into Russian.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 2576
diff changeset
540
2480
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
541 </para>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
542
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
543 </section>
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
544
73d254c3376d Added the "Using node modules with njs" article.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
545 </article>