<div dir="ltr">2013/6/27 Igor Vlasenko <span dir="ltr">&lt;<a href="mailto:vlasenko@imath.kiev.ua" target="_blank">vlasenko@imath.kiev.ua</a>&gt;</span><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="im">On Thu, Jun 27, 2013 at 07:47:39PM +0300, Igor Vlasenko wrote:<br>
&gt; хочу написать библиотеку, которая определяла бы, какое<br>
&gt; минимальное число версий пакета надо собрать и порядок их<br>
&gt; сборки.<br>
<br>
</div>И хочу отметить, что эту библиотеку я еще не написал,<br>
а то, что ушло в autoimports, это тестирование,<br>
пробная сборка, чтобы убедиться, что rpm-build-nodejs работает,<br>
toolchain работает, зависимости присутствуют.<br>
<br>
Я эти пакеты могу удалить, если они кому-то мешают.</blockquote><div><br></div><div><br></div><div style>Может помогу немного...на примере того же express.</div><div style><br></div><div style>Я надеюсь робот умеет брать с интернета то что ему нужно.</div>
<div style><br></div><div style>для начала <a href="https://registry.npmjs.org/express">https://registry.npmjs.org/express</a> получаем описание пакета в package.</div><div style><br></div><div style>разбираем package.versions<br>
</div><div style><br></div><div style><span class="" style="color:rgb(32,74,135);font-family:&#39;DejaVu Sans Mono&#39;,&#39;Courier New&#39;,monospace;font-size:11px;line-height:17px">&quot;<span class="">versions</span>&quot;</span><span style="color:rgb(0,0,0);font-family:&#39;DejaVu Sans Mono&#39;,&#39;Courier New&#39;,monospace;font-size:11px;line-height:17px">:</span><span class="" style="color:rgb(0,0,0);font-family:&#39;DejaVu Sans Mono&#39;,&#39;Courier New&#39;,monospace;font-size:11px;line-height:17px"><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><ul style="list-style-type:none;margin:0px;padding:0px 0px 0px 20px">
<li><span class="" style="color:rgb(32,74,135)">&quot;<span class="">0.14.0</span>&quot;</span>:<span class=""><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><span class="" style="color:rgb(114,159,207)">}</span>,</span></li>
<li><span class="" style="color:rgb(32,74,135)">&quot;<span class="">0.14.1</span>&quot;</span>:<span class=""><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><span class="" style="color:rgb(114,159,207)">}</span>,</span></li>
<li><span class="" style="color:rgb(32,74,135)">&quot;<span class="">1.0.0beta</span>&quot;</span>:<span class=""><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><span class="" style="color:rgb(114,159,207)">}</span>,</span></li>
<li><span class="" style="color:rgb(32,74,135)">&quot;<span class="">1.0.0beta2</span>&quot;</span>:<span class=""><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><span class="" style="color:rgb(114,159,207)">}</span>,</span></li>
<li><span class="" style="color:rgb(32,74,135)">&quot;<span class="">1.0.0rc</span>&quot;</span>:<span class=""><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><span class="" style="color:rgb(114,159,207)">}</span>,</span></li>
<li><span class="" style="color:rgb(32,74,135)">&quot;<span class="">1.0.0rc2</span>&quot;</span>:<span class=""><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><span class="" style="color:rgb(114,159,207)">}</span>,</span></li>
<li><span class="" style="color:rgb(32,74,135)">&quot;<span class="">1.0.0rc3</span>&quot;</span>:<span class=""><span class="" style="border:1px solid transparent;color:rgb(114,159,207)">{</span><span class="" style="color:rgb(114,159,207)">}</span>,</span></li>
<li>...</li></ul></span></div><div style>}</div><div style><br></div><div style>сортируем в порядке убывания версии. для сортировки родной механизм - <a href="https://github.com/isaacs/node-semver">https://github.com/isaacs/node-semver</a> в ридми все по человечески написано</div>
<div style><br></div><div style>если не указана версия - то берем максимальную иначе через semver идем от максимальной и вниз.</div><div style><br></div><div style>если подходит - запоминаем version</div><div style><br></div>
<div style>если эта версия уже есть в репозитории - то припускаем,</div><div style><br></div><div style>далее работаем с package.versions[version] </div><div style><div>{</div><div>    &quot;name&quot;: &quot;express&quot;,</div>
<div>    &quot;description&quot;: &quot;Sinatra inspired web development framework&quot;,</div><div>    &quot;version&quot;: &quot;3.3.1&quot;,</div><div>    &quot;author&quot;: {</div><div>        &quot;name&quot;: &quot;TJ Holowaychuk&quot;,</div>
<div>        &quot;email&quot;: &quot;<a href="mailto:tj@vision-media.ca">tj@vision-media.ca</a>&quot;</div><div>    },</div><div>    &quot;contributors&quot;: [</div><div>        {</div><div>            &quot;name&quot;: &quot;TJ Holowaychuk&quot;,</div>
<div>            &quot;email&quot;: &quot;<a href="mailto:tj@vision-media.ca">tj@vision-media.ca</a>&quot;</div><div>        },</div><div>        {</div><div>            &quot;name&quot;: &quot;Aaron Heckmann&quot;,</div>
<div>            &quot;email&quot;: &quot;<a href="mailto:aaron.heckmann%2Bgithub@gmail.com">aaron.heckmann+github@gmail.com</a>&quot;</div><div>        },</div><div>        {</div><div>            &quot;name&quot;: &quot;Ciaran Jessup&quot;,</div>
<div>            &quot;email&quot;: &quot;<a href="mailto:ciaranj@gmail.com">ciaranj@gmail.com</a>&quot;</div><div>        },</div><div>        {</div><div>            &quot;name&quot;: &quot;Guillermo Rauch&quot;,</div><div>
            &quot;email&quot;: &quot;<a href="mailto:rauchg@gmail.com">rauchg@gmail.com</a>&quot;</div><div>        }</div><div>    ],</div><div>    &quot;dependencies&quot;: { //<span style="color:rgb(114,159,207);font-family:&#39;DejaVu Sans Mono&#39;,&#39;Courier New&#39;,monospace;font-size:11px;line-height:17px">Их снова скармливаем роботу, робот должен по идее вернуть собраную версию для наших Reqs</span></div>
<div>        &quot;connect&quot;: &quot;2.8.1&quot;,</div><div>        &quot;commander&quot;: &quot;0.6.1&quot;,</div><div>        &quot;range-parser&quot;: &quot;0.0.4&quot;,</div><div>        ...</div><div>    },</div><div>
    &quot;devDependencies&quot;: { <span style="color:rgb(114,159,207);font-family:&#39;DejaVu Sans Mono&#39;,&#39;Courier New&#39;,monospace;font-size:11px;line-height:17px">// Эти зависимости не ставятся по умолчанию. Только если мы разрабатываем модуль, для тестирования, прочее</span></div>
<div>        &quot;ejs&quot;: &quot;*&quot;,</div><div>        &quot;mocha&quot;: &quot;*&quot;,</div><div>        &quot;jade&quot;: &quot;0.30.0&quot;,</div><div>      ...</div><div>    },</div><div>    &quot;keywords&quot;: [</div>
<div>        &quot;express&quot;,</div><div>        &quot;framework&quot;,</div><div>         ...</div><div>    ],</div><div>    &quot;repository&quot;: {</div><div>        &quot;type&quot;: &quot;git&quot;,</div><div>        &quot;url&quot;: &quot;git://<a href="http://github.com/visionmedia/express">github.com/visionmedia/express</a>&quot;</div>
<div>    },</div><div>    &quot;main&quot;: &quot;index&quot;,</div><div>    &quot;bin&quot;: { <span style="color:rgb(114,159,207);font-family:&#39;DejaVu Sans Mono&#39;,&#39;Courier New&#39;,monospace;font-size:11px;line-height:17px">// это то что должно линковаться в /usr/bin и как называться</span></div>
<div>        &quot;express&quot;: &quot;./bin/express&quot;</div><div>    },</div><div>    &quot;scripts&quot;: { <span style="color:rgb(114,159,207);font-family:&#39;DejaVu Sans Mono&#39;,&#39;Courier New&#39;,monospace;font-size:11px;line-height:17px">//здесь описываются команды для сборки </span></div>
<div>        &quot;prepublish&quot;: &quot;npm prune&quot;,</div><div>        &quot;test&quot;: &quot;make test&quot;</div><div>    },</div><div>    &quot;engines&quot;: { <span style="color:rgb(114,159,207);font-family:&#39;DejaVu Sans Mono&#39;,&#39;Courier New&#39;,monospace;font-size:11px;line-height:17px">//некоторые модули могут указывать на старые версии, но работают и на более новых</span></div>
<div>        &quot;node&quot;: &quot;*&quot;</div><div>    },</div><div><span style="color:rgb(0,0,0);font-family:&#39;DejaVu Sans Mono&#39;,&#39;Courier New&#39;,monospace;font-size:11px;line-height:17px">// Это у нас markdown.  иногда присутствует файлом</span><br>
</div><div>    &quot;readme&quot;: &quot;![express logo](<a href="http://f.cl.ly/items/0V2S1n0K1i3y1c122g04/Screen%20Shot%202012-04-11%20at%209.59.42%20AM.png">http://f.cl.ly/items/0V2S1n0K1i3y1c122g04/Screen%20Shot%202012-04-11%20at%209.59.42%20AM.png</a>)\n\n Fast, unopinionated, minimalist web framework for [node](<a href="http://nodejs.org">http://nodejs.org</a>). &quot;,</div>
<div>    &quot;readmeFilename&quot;: &quot;Readme.md&quot;,</div><div>    &quot;_id&quot;: &quot;express@3.3.1&quot;,</div><div>    &quot;dist&quot;: {</div><div>        &quot;shasum&quot;: &quot;4bb79fb3548313d9e1a49ffdc5aa369a936127d7&quot;,</div>
<div>        &quot;tarball&quot;: &quot;<a href="http://registry.npmjs.org/express/-/express-3.3.1.tgz">http://registry.npmjs.org/express/-/express-3.3.1.tgz</a>&quot;</div><div>    },</div><div>    &quot;_from&quot;: &quot;.&quot;,</div>
<div>    &quot;_npmVersion&quot;: &quot;1.2.14&quot;,</div><div>    &quot;_npmUser&quot;: {</div><div>        &quot;name&quot;: &quot;tjholowaychuk&quot;,</div><div>        &quot;email&quot;: &quot;<a href="mailto:tj@vision-media.ca">tj@vision-media.ca</a>&quot;</div>
<div>    },</div><div>    &quot;maintainers&quot;: [</div><div>        {</div><div>            &quot;name&quot;: &quot;tjholowaychuk&quot;,</div><div>            &quot;email&quot;: &quot;<a href="mailto:tj@vision-media.ca">tj@vision-media.ca</a>&quot;</div>
<div>        }</div><div>    ],</div><div>    &quot;directories&quot;: {</div><div style>    },</div><div style>}<br></div></div><div style><br></div><div style>Более подробно читаем <a href="https://npmjs.org/doc/json.html">https://npmjs.org/doc/json.html</a><br>
</div><div style><br></div><div style>Надеюсь информация будет полезной</div><div style> </div></div><div style>З.Ы есть в версиях package.versions[version].license</div><ul style="list-style-type:none;margin:0px;padding:0px 0px 0px 20px;color:rgb(0,0,0);font-family:&#39;DejaVu Sans Mono&#39;,&#39;Courier New&#39;,monospace;font-size:11px;line-height:17px">
<li><br></li></ul>-- <br>Dmitry Kulik<br>ALTLinux Team<br>e-mail: lnkvisitor.ts[at]<a href="http://gmail.com" target="_blank">gmail.com</a><br>jabber: lnkvisitor.ts[at]<a href="http://gmail.com" target="_blank">gmail.com</a></div>
</div>