bitrix-tools / cli

Консольный инструмент Битрикс-разработчика
58 stars 25 forks source link

Не работает импорт экстеншнов #6

Closed nook-ru closed 5 years ago

nook-ru commented 5 years ago

Возникает ошибка Uncaught TypeError: xxx is not a constructor/function

Воспроизвести можно так:

  1. Создаем пару экстеншенов:

    
    $ mkdir -p ./local/js/partner/module && cd $_
    
    $ bitrix create ext1
    
    $ bitrix create ext2
  2. Добавляем в ext2 импорт ext1:

    --- a/local/js/partner/module/ext2/src/ext2.js
    +++ b/local/js/partner/module/ext2/src/ext2.js
    @@ -1,10 +1,13 @@
     import {Type} from 'main.core';
    +import {Ext1} from "partner.module.ext1";
    
     export class Ext2
     {
            constructor(options = {name: 'Ext2'})
            {
                    this.name = options.name;
    +
    +               this.ext1 = new Ext1();
            }
    
            setName(name)
  3. $ bitrix build -p .

  4. Подключаем:

    <?php
    
    \Bitrix\Main\UI\Extension::load(['partner.module.ext2']);
    ?>
    <script>
    var ext2 = new BX.Partner.Module.Ext2();
    </script>
    

Видим ошибку:

image

nook-ru commented 5 years ago

Возможно как-то связано: тесты не проходят из-за import'ов даже на свежесозданном экстеншене:

(node:17071) UnhandledPromiseRejectionWarning: Error: Cannot find module 'main.core'
Require stack:
- /ext1/src/ext1.js
- /ext1/test/ext1/ext1.test.js
![image](https://user-images.githubusercontent.com/444489/59887654-e076bc00-93cc-11e9-8c86-3c5fcad20890.png)
nook-ru commented 5 years ago

В полученном бандле лучше видно откуда ошибка: вторым аргументом (partner_module_ext1) в iife передается BX без учета неймспейса импортируемого эктеншена. Должен передаваться BX.Partner.Module, наверное.

Скрин ![image](https://user-images.githubusercontent.com/444489/59906430-69afe200-9411-11e9-836d-4ab4b1ef8193.png)

В таком виде импорт работает, только зависимость от partner.module.ext1 приходится вручную указывать.

import * as BX from "main";

const ext1 = new BX.Partner.Module.Ext1();
vovkabelov commented 5 years ago

@nook-ru, действительно, была ошибка при генерации неймспейса. Поправил. Обновите @bitrix/cli, должно заработать