Files
help365/platform/npm-package.html
koziavin 00717a92fb
All checks were successful
Deploy Static Site / deploy (push) Successful in 6m6s
update
2025-05-29 16:42:45 +04:00

340 lines
36 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<title>Server dependencies in npm packages</title>
<meta name="generator" content="Help+Manual" />
<meta name="keywords" content="" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="In BRIX On-Premises, you can add server dependencies in widget scripts. This allows you to solve some uncommon problems without writing custom microservices. Instead, you can..." />
<meta name="picture" content="" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Full documentation for BRIX365 platform. Low-code developer guide. User guide. Admin guide. Developer guide." />
<meta property="og:url" content="https://brix365.com/en/help" />
<meta property="og:image" content="" />
<link rel="icon" href="favicon.png" type="image/png" />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="./jquery-ui.min.css" />
<link rel="stylesheet" href="default.css" />
<link rel="stylesheet" href="./search-yandex.css" />
<link rel="stylesheet" href="./article.css" />
<link rel="stylesheet" href="./glossary.css" />
<link rel="stylesheet" href="./theme.css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="helpman_settings.js"></script>
<script type="text/javascript" src="helpman_topicinit.js"></script>
<script type="text/javascript" src="highlight.js"></script>
<script type="text/javascript">
$(document).ready(function(){highlight();});
</script>
</head>
<body>
<script>!function(e,t,c,n,r,a,m){e.ym=e.ym||function(){(e.ym.a=e.ym.a||[]).push(arguments)},e.ym.l=1*new Date;for(var s=0;s<document.scripts.length;s++)if(document.scripts[s].src===n)return;a=t.createElement(c),m=t.getElementsByTagName(c)[0],a.async=1,a.src=n,m.parentNode.insertBefore(a,m)}(window,document,"script","https://mc.yandex.ru/metrika/tag.js"),ym(83179930,"init",{clickmap:!0,trackLinks:!0,accurateTrackBounce:!0,webvisor:!0})</script><noscript><div><img alt=""src=https://mc.yandex.ru/watch/83179930 style=position:absolute;left:-9999px></div></noscript>
<header class="header elma-365">
<div class="container">
<a class="header__logo" href="https://brix365.com/en/help">
<img src="./logo-en.svg" alt="header logo">
</a>
<!-- <div class="hero__search-form" id="search-panel">
<form class="search-form" onsubmit="ym(83180416,'reachGoal','poisk')">
<label class="search-form__label">
<span id="reset-search" class="search__icon"></span>
<input class="search-form__input" type="text">
</label>
<input class="search-form__submit" type="submit" value="Submit">
</form>
</div> -->
<div class="hero__search-form" id="search-panel"> <form class="search-form"> <label class="search-form__label"> <span id="reset-search" class="search__icon"></span> <input class="search-form__input" type="text"> </label> <input class="search-form__submit" type="submit" value="Submit"> </form> </div>
<div class="hero__search">
<a href="#" id="search-icon" class="hero__search-icon">
<img src="search-icon-white.svg" alt="search string">
</a>
<a href="#" id="side-menu-icon" class="hero__side-icon">
<img src="side_menu.svg" alt="side menu">
</a>
</div>
<div class="header__navi">
<ul class="header__list"><li><span class="solution-select"><span class="solution-select__selected"></span><svg width="7" height="4" viewBox="0 0 7 4" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L3.5 3.5L6 1" stroke="white" stroke-linecap="round" stroke-linejoin="round"/></svg><ul class="solution-select__list"><li><a class="project-link" href="https://brix365.com/en/help/platform/get-trial.html">Platform</a></li><li><a class="project-link" href="https://brix365.com/en/help/ecm/ecm-functions.html">ECM</a></li><li><a class="project-link" href="https://brix365.com/en/help/crm/crm_overview.html">CRM</a></li><li><a class="project-link" href="https://brix365.com/en/help/service/service-functions.html">Service</a></li><li><a class="project-link" href="https://brix365.com/en/help/projects/projects-functions.html">Projects</a></li><li><a class="project-link" href="https://brix365.com/en/help/business_solutions/-elma365-store.html">Business Solutions</a></li></ul></span></li><li><a href="https://api.brix365.com/en/" target="_blank">API</a></li><li><a href="https://tssdk.brix365.com/" target="_blank">SDK</a></li></ul>
</div>
</div>
</header>
<main class="main container">
<aside class="sidebar" id="sidebar">
<div class="sidebar__header">
<a class="header__logo" href="https://brix365.com/en/help">
<img src="./logo-light-en.svg">
</a>
<span class="sidebar__close elma-365-close" id="close"></span>
</div>
<div class="sidebar__wrapper" id="side-menu">
</div>
</aside>
<article class="article" id="article">
<div class="article-inner">
<div class="content">
<header class="article__header">
<div class="article__bread" style="display:flex; gap:10px;">
<span id="subcategory" class="search-res__item-category search-res__item-category_subcategory subcategory article__badge"></span>
<div class="topic__breadcrumbs">
<p><a href="solutions-building.html">Build solutions in BRIX</a> / Server dependencies in npm packages</p>
</div>
</div>
<div class="topic__title"><h1 class="p_Heading1"><span class="f_Heading1">Server dependencies in npm packages</span></h1>
</div>
</header>
<section class="article__content">
<div class="scroll-top-inner">
<a href="#h1-article" class="scroll-top"></a>
</div>
<!-- Placeholder for topic body. -->
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-size: 15px; font-family: Inter;">In BRIX On-Premises, you can add server dependencies in widget scripts. This allows you to solve some uncommon problems without writing custom microservices. Instead, you can use the rich ecosystem of npm packages when writing server scripts. </span><span style="font-family: Inter;">For example, you can add the <a href="https://www.npmjs.com/package/xlsx" target="_blank" class="weblink">XLSX</a> package to read data from Excel files using the following commands:</span></p>
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">import * as XLSX from 'xlsx';</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">const url = await Context.data.file.getDownloadUrl();</span><br />
<span class="f_CodeExample">const req = await fetch(url);</span><br />
<span class="f_CodeExample">const data = await req.arrayBuffer();</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">const workbook = XLSX.read(data);</span><br />
<span class="f_CodeExample">const sheets = workbook.Sheets;</span><br />
<span class="f_CodeExample">const cellValue = sheets['Sheet1']['A1'].v;</span></p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">начало&nbsp;внимание</span></p>
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-family: Inter;">Server dependencies in npm packages can be added only in <a href="elma365-on-premises.html" class="topiclink">BRIX On-Premises</a>.</span></p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">конец&nbsp;внимание</span></p>
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-size: 15px; font-family: Inter;">To create an npm package, pack the prepared </span><code><b>node_modules</b></code><span style="font-size: 15px; font-family: Inter;"> folder and the </span><code><b>package.json</b></code><span style="font-size: 15px; font-family: Inter;"> file into an archive called </span><code><b>dependencies.tar.gz</b></code><span style="font-size: 15px; font-family: Inter;">. For more details see:</span></p>
<ul style="list-style-type:disc">
<li style="line-height: 1.20;"><a href="npm-package.html#npm-package-shell-linuxmacos" class="topiclink">building a package with a Shell scritp for Linux, macOS</a><span style="font-size: 15px; color: #394149;">;</span></li><li style="line-height: 1.20;"><span style="color: #394149;"><a href="npm-package.html#npm-package-powershell-windows" class="topiclink">building a package with a PowerShell script for Windows</a></span><span style="font-size: 15px; color: #394149;">.</span></li></ul>
<p style="line-height: 1.20; margin: 0 0 16px 0;"><span style="font-size: 15px; color: #394149;">Install Docker before starting work.</span></p>
<h2 class="p_Heading2"><a id="npm-package-shell-linuxmacos" class="hmanchor"></a><span class="f_Heading2">Building a package with server dependencies using a Shell script for Linux, macOS</span></h2>
<ol style="list-style-type:upper-roman">
<li value="1" class="p_Normal">Create an empty folder on your computer. Copy the script below and save it as a file named <span style="font-weight: bold;">makedeps.sh</span> in the created folder:</li></ol>
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">rm</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-rf</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">./deps</span><br />
<span class="f_CodeExample">docker</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">run</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-v</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">`pwd`:/data</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-w</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">/data/deps</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">--platform</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">linux/amd64</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">--rm</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">node:14.16.0-alpine</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">/bin/sh</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-c</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">&quot;npm init -y &amp;&amp; npm i $*&quot;</span><br />
<span class="f_CodeExample">docker</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">run</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-v</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">`pwd`:/data</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-w</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">/data</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">--platform</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">linux/amd64</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">--rm</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">busybox</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">tar</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-zcf</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">dependencies.tar.gz</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-C</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">/data/deps</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">node_modules</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">package.json</span><br />
<span class="f_CodeExample">rm</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-rf</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">./deps</span></p>
<ol style="list-style-type:upper-roman" start="2">
<li value="2" class="p_Normal">Through the developer console, find the saved file and make it executable:</li></ol>
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">$chmod 755 makedeps.sh</span></p>
<ol style="list-style-type:upper-roman" start="3">
<li value="3" class="p_Normal">Run the script, passing a list of npm packages as parameters. For example, for the XLSX package: </li></ol>
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">$./makedeps.sh xlsx semver</span></p>
<p class="p_Normal">As a result of the command execution, an archive with dependencies named <span style="font-weight: bold;">dependencies.tar.gz</span>.</p>
<ol style="list-style-type:upper-roman" start="4">
<li value="4" class="p_Normal">Upload the package to the system; this can be done in the <a href="client_server_scripts.html" class="topiclink">widget settings</a> in the interface designer and in the custom module when creating an <a href="extention-api.html" class="topiclink">API method</a>: add the obtained dependencies archive on the <span style="font-weight: bold;">Files</span> tab.</li></ol>
<p class="p_Normal">Packed server dependencies can be used in server script code.</p>
<h2 class="p_Heading2"><a id="npm-package-powershell-windows" class="hmanchor"></a><span class="f_Heading2">Building a package with server dependencies using a PowerShell script for Windows</span></h2>
<ol style="list-style-type:upper-roman">
<li value="1" class="p_Normal">Create an empty folder on your computer. Copy the script below and save it as a file named <span style="font-weight: bold;">makedeps.ps1</span> in the created folder:</li></ol>
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">$ErrorActionPreference</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">=</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">&quot;SilentlyContinue&quot;</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">#This</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">will</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">hide</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">errors</span><br />
<span class="f_CodeExample">Remove-Item</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-Recurse</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-Force</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">.\deps</span><br />
<span class="f_CodeExample">$ErrorActionPreference</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">=</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">&quot;Continue&quot;</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">#Turning</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">errors</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">back</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">on</span><br />
<span class="f_CodeExample">docker</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">run</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-v</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">${PWD}:/data</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-w</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">/data/deps</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">--platform</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">linux/amd64</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">--rm</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">node:14.16.0-alpine</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">/bin/sh</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-c</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">&quot;npm init -y &amp;&amp; npm i $args&quot;</span><br />
<span class="f_CodeExample">docker</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">run</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-v</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">${PWD}:/data</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-w</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">/data</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">--platform</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">linux/amd64</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">--rm</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">busybox:stable</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">tar</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-zcf</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">dependencies.tar.gz</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-C</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">/data/deps</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">node_modules</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">package.json</span><br />
<span class="f_CodeExample">Remove-Item</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-Recurse</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">-Force</span><span class="f_CodeExample" style="color: #ffffff;"> </span><span class="f_CodeExample">.\deps</span></p>
<ol style="list-style-type:upper-roman" start="2">
<li value="2" class="p_Normal">Run the script, passing a list of npm packages as parameters. For example, for the XLSX package: </li></ol>
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">$./makedeps.ps1 xlsx semver</span></p>
<p class="p_Normal">As a result of the command execution, an archive with dependencies named <span style="font-weight: bold;">dependencies.tar.gz</span>.</p>
<ol style="list-style-type:upper-roman" start="3">
<li value="3" class="p_Normal">Upload the package to the system; this can be done in the <a href="client_server_scripts.html" class="topiclink">widget settings</a> in the interface designer and in the custom module when creating an <a href="extention-api.html" class="topiclink">API method</a>: add the obtained dependencies archive on the <span style="font-weight: bold;">Files</span> tab.</li></ol>
<p class="p_Normal">Packed server dependencies can be used in server script code.</p>
<h2 class="p_Heading2"><span class="f_Heading2">Module connection features</span></h2>
<p class="p_Normal">Pay attention to some features of importing components when connecting modules.</p>
<div style="text-align: left; text-indent: 0; line-height: 1.80; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
<tr>
<td colspan="2" style="vertical-align:top; width:950px; padding:0; border:none"><p class="p_Normal"><span style="font-weight: bold;">In custom scripts</span></p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:477px; height:15px; padding:0; border:none"><p class="p_Normal">can be imported:</p>
</td>
<td style="vertical-align:top; width:473px; height:15px; padding:0; border:none"><p class="p_Normal">cannot be imported:</p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:477px; padding:0; border:none"><ul style="list-style-type:disc">
<li class="p_Normal">modules from <span style="font-weight: bold;">package.json</span> (dependencies section).</li></ul>
</td>
<td style="vertical-align:top; width:473px; padding:0; border:none"><ul style="list-style-type:disc">
<li class="p_Normal">transitive dependencies;</li></ul>
<ul style="list-style-type:disc">
<li class="p_Normal">host modules (in relation to <a href="https://nodejs.org/docs/latest-v14.x/api/cluster.html#cluster_class_worker" target="_blank" class="weblink">worker</a>);</li></ul>
<ul style="list-style-type:disc">
<li class="p_Normal">built-in <span style="font-weight: bold;">node.js </span>modules<span style="font-weight: bold;"> </span>(fs, path, tty, etc.).</li></ul>
</td>
</tr>
<tr>
<td colspan="2" style="vertical-align:top; width:950px; padding:0; border:none"><p class="p_Normal"><span style="font-weight: bold;">In external modules imported into the script</span></p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:477px; padding:0; border:none"><p class="p_Normal">can be imported:</p>
</td>
<td style="vertical-align:top; width:473px; padding:0; border:none"><p class="p_Normal">cannot be imported:</p>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:477px; padding:0; border:none"><ul style="list-style-type:disc">
<li class="p_Normal">any other modules present in the dependencies directory.;</li></ul>
<ul style="list-style-type:disc">
<li class="p_Normal">built-in <span style="font-weight: bold;">node.js </span>modules (fs, path, tty, etc.).</li></ul>
</td>
<td style="vertical-align:top; width:473px; padding:0; border:none"><ul style="list-style-type:disc">
<li style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;">host modules (in relation to <a href="https://nodejs.org/docs/latest-v14.x/api/cluster.html#cluster_class_worker" target="_blank" class="weblink">worker</a>).</li></ul>
</td>
</tr>
</table>
</div>
<p class="p_Normal">TypeScript compilation on the server is performed with the following <span style="font-weight: bold;">tsconfig</span> parameters:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">{</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;&nbsp;allowJs:&nbsp;</span><span class="f_CodeExample" style="font-weight: bold;">true</span><span class="f_CodeExample">,</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;&nbsp;checkJs:&nbsp;</span><span class="f_CodeExample" style="font-weight: bold;">false</span><span class="f_CodeExample">,</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;&nbsp;declaration:&nbsp;</span><span class="f_CodeExample" style="font-weight: bold;">false</span><span class="f_CodeExample">,</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;&nbsp;module:&nbsp;&quot;commonjs&quot;,</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;&nbsp;moduleResolution:&nbsp;&quot;node&quot;,</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;&nbsp;noImplicitAny:&nbsp;</span><span class="f_CodeExample" style="font-weight: bold;">true</span><span class="f_CodeExample">,</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;&nbsp;strictNullChecks:&nbsp;</span><span class="f_CodeExample" style="font-weight: bold;">true</span><span class="f_CodeExample">,</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;&nbsp;stripInternal:&nbsp;</span><span class="f_CodeExample" style="font-weight: bold;">true</span><span class="f_CodeExample">,</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;&nbsp;skipDefaultLibCheck:&nbsp;</span><span class="f_CodeExample" style="font-weight: bold;">true</span><span class="f_CodeExample">,</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;&nbsp;target:&nbsp;&quot;ES2017&quot;,</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;&nbsp;typeRoots:&nbsp;['node_modules/@types',&nbsp;'node_modules'],</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;&nbsp;lib:&nbsp;['es2016']</span><br />
<span class="f_CodeExample">}</span></p>
<p class="p_Normal">Note that not all npm packages work with these parameters without modifications. You may need to wrap them in a thin layer compatible with CommonJS or AMD.</p>
<h2 class="p_Heading2"><span class="f_Heading2">Supported JavaScript module systems</span></h2>
<p class="p_Normal">As server-side dependencies, you can use modules based on two JavaScript module systems: CommonJS and UMD (Universal Module Definition).</p>
<h3 class="p_Heading3"><span class="f_Heading3">Module import examples</span></h3>
<p class="p_Normal">Using the CommonJS module as an example, let's look at how to import it. Let's say a module contains one function and one constant:</p>
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">function add(a, b) {</span><br />
<span class="f_CodeExample"> return a + b;</span><br />
<span class="f_CodeExample">}</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">const name = 'noname'</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">module.exports = {</span><br />
<span class="f_CodeExample"> add,</span><br />
<span class="f_CodeExample"> name</span><br />
<span class="f_CodeExample">}</span></p>
<p class="p_Normal">You can import such module in three ways:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">//&nbsp;1&nbsp;named&nbsp;import</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">import&nbsp;{&nbsp;add,&nbsp;name&nbsp;}&nbsp;from&nbsp;'module_name';</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">async&nbsp;function&nbsp;test():&nbsp;Promise&lt;void&gt;&nbsp;{</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;Context.data.res&nbsp;=&nbsp;add(1,&nbsp;3);</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;Context.data.text&nbsp;=&nbsp;name;</span><br />
<span class="f_CodeExample">}</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">//&nbsp;2&nbsp;namespace&nbsp;import</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">import&nbsp;*&nbsp;as&nbsp;m&nbsp;from&nbsp;'module_name';</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">async&nbsp;function&nbsp;test():&nbsp;Promise&lt;void&gt;&nbsp;{</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;Context.data.res&nbsp;=&nbsp;m.add(1,&nbsp;3);</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;Context.data.text&nbsp;=&nbsp;m.name;</span><br />
<span class="f_CodeExample">}</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">//&nbsp;3&nbsp;alias&nbsp;import</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">import&nbsp;{&nbsp;add&nbsp;as&nbsp;plus&nbsp;}&nbsp;from&nbsp;'module_name';</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">async&nbsp;function&nbsp;test():&nbsp;Promise&lt;void&gt;&nbsp;{</span><br />
<span class="f_CodeExample">&nbsp;&nbsp;&nbsp;Context.data.res&nbsp;=&nbsp;plus(1,&nbsp;3);</span><br />
<span class="f_CodeExample">}</span></p>
<p class="p_Normal">Module documentation frequently includes examples with <code><b>require</b></code> for import. Instead of using <code><b>require</b></code>, you can use <code><b>namespace import</b></code> as shown in the second example above:</p>
<p class="p_CodeExample" style="white-space: normal; page-break-inside: avoid;"><span class="f_CodeExample">var m = require('module_name');</span><br />
<span class="f_CodeExample">m.example();</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">...</span><br />
<span class="f_CodeExample">&nbsp;</span><br />
<span class="f_CodeExample">import * as m from 'module_name';</span><br />
<span class="f_CodeExample">m.example();</span></p>
<div class="bottom-nav">
<a id="prev-link" class="topic__navi_prev" href="lowcode-devops-pm.html">
<span class="bottom-nav__arrow bottom-nav__arrow--prev"></span> <span
class="bottom-nav__link">lowcode-devops-pm.html</span>
</a>
<a id="next-link" class="topic__navi_next" href="portable-microservices.html">
<span class="bottom-nav__link">portable-microservices.html</span> <span
class="bottom-nav__arrow bottom-nav__arrow--next"></span>
</a>
</div>
<!-- добавляет на страницу строку блок Была ли статья полезной? -->
<div class="feedback" id="feedback"><div class="feedback-help"><span><b>Was this helpful?</b></span><form action="" method="POST" class="feedback-form" id="feedback-form"><div class="feedback__popup feedback__popup-response" id="feedback__popup_thx" style="display: none;">Thanks for your feedback!</div><div class="feedback__popup" id="feedback__popup_why" style="display: none;"><div class="feedback__popup-header">Please specify why:</div><input type="radio" name="category" id="bad_recommendation" value="bad_recommendation"><label for="bad_recommendation">Recommendations did not help me</label><input type="radio" name="category" id="difficult_text" value="difficult_text"><label for="difficult_text">Article is hard to understand</label><input type="radio" name="category" id="no_answer" value="no_answer"><label for="no_answer">Didn`t answer my question</label><input type="radio" name="category" id="bad_header" value="bad_header"><label for="bad_header">Content does not match the topic</label><input type="radio" name="category" id="other_reason" value="other_reason"><label for="other_reason">Other</label></div><div class="feedback__popup" id="feedback__popup-other" style="display: none;"><div class="feedback__popup-header">How we can improve it?</div><textarea class="feedback__textarea" name="other" id=""></textarea><input type="submit" class="feedback__other-btn" value="Submit"></div><div class="feedback-form__btn-group"><input type="radio" name="useful" id="feedback__useful_yes" value="true"><label for="feedback__useful_yes"><img src="like.svg" class="small-img" alt="like"><spanclass="feedback-form__btn-group_yes-btn">Yes</spanclass="feedback-form__btn-group_yes-btn"></label><input type="radio" name="useful" id="feedback__useful_no" value="false"><label for="feedback__useful_no"><img src="dislike.svg" class="small-img" alt="dislike"><spanclass="feedback-form__btn-group_no-btn">No</spanclass="feedback-form__btn-group_no-btn"></label></div><select name="category"><option disabled="">Please specify why</option><option value="bad_recommendation" selected="">Recommendations did not help me</option><option value="difficult_text">Article is hard to understand</option><option value="no_answer">Didn`t answer my question</option><option value="bad_header">Content does not match the topic</option><option value="other_reason">Other</option></select><input type="submit"></form></div><div class="found_typo"><p style="margin: 0px; margin-top: 16px !important;"><span><b>Found a typo?</b></span> Select it and press <i>Ctrl+Enter</i> to send us feedback</p></div></div>
</section>
</div>
<aside class="article__sidebar" style="display:none">
<input type="checkbox" />
<div class="article__arrow"></div>
<div class="table-of-contents elma365-right" id="toc2Content">
<h3 class="h3-toc">In this topic</h3>
<nav id="toc2"></nav>
</div>
</aside>
</div>
</article>
</main>
<footer class="footer">
<div class="footer-container">
<div class="footer-mobile">
<ul class="footer-mobile__list"><li><a href="https://brix365.com/en/" target="_blank">BRIX</a></li><li><a href="https://tssdk.brix365.com/en/latest/" target="_blank">SDK</a></li><li><a href="https://api.brix365.com/en/" target="_blank">API</a></li></ul><ul class="footer-mobile__list"><li><a href="https://brix365.com/en/help/platform/get-trial.html">Platform</a></li><li><a href="https://brix365.com/en/help/ecm/ecm-functions.html">ECM</a></li><li><a href="https://brix365.com/en/help/service/service-functions.html">Service</a></li><li><a href="https://brix365.com/en/help/projects/projects-functions.html">Projects</a></li></ul>
</div>
<div class="footer-wrap">
<div><span class="mobile-question-popup">Send feedback</span><form method="POST" action class="question__popup question-xs" id="question__popup"><div class="question-wrap"><span class="close"></span><span class="title">Ask a question</span><label for="help_question" style="display: none;"></label><textarea name="help_question" id="help_question"></textarea><input type="submit" value="Send"></div></form><div class="hidden fade-in question-success-xs">Sent</div></div>
<div class="footer-flex-b">
<span class="footer-copy">&copy; 2025 BRIX</span>
<ul class="footer-list">
<li class="footer-item">
<a href="#" class="arrow-top" style="display: block;"></a>
</li>
</ul>
</div>
</div>
</div>
</footer>
<iframe name="hmnavigation" style="display:none!important"></iframe>
<script src="./jquery-ui.js"></script>
<!--script src="//cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.min.js" type="text/javascript" charset="utf-8"></script-->
<script src="./jquery.tocify.min.js"></script>
<script src="./TypoReporter.min.js"></script>
<script src="./google-search.js"></script>
<script src="./main.js"></script>
</body>
</html>