GitHub — gogs / gogs на webdesignernews.com

Текущая версия наконечника: .VERSION (см. Выпуски для двоичных версий) Важные примечания ВЫ ДОЛЖНЫ ПРОЧИТАТЬ СОДЕЙСТВУЮЩИЙ КОД, ПРЕЖДЕ ЧЕМ НАЧАТЬ РАБОТУ ПО ЗАПРОСУ ТЯГИ . В связи с целью тестирования данные try.gogs.io были сброшены в 28 января 2015 года и будут сбрасываться несколько раз после. Пожалуйста, НЕ размещайте ваши важные данные на сайте. Демонстрационный сайт try.gogs.io…

GitHub — lucagez / medium.css на webdesignernews.com

минимальный набор типографики, посвященной Medium.com Установка npm install —save medium.css Если вы не используете бандлер, скачайте файл medium.css и свяжите его в своем HTML Демонстрация жить: https://codepen.io/lucagez/full/bQObBe/ Если вы хотите запустить демо локально, просто клонируйте репозиторий и запустите npm install а затем npm start внутри / demo directory Почему Я обнаружил, что всегда боролся за…

GitHub — minimaxir / big-list-of-naughty-strings на webdesignernews.com

Большой список Naughty Strings — это эволюционирующий список строк, которые имеют высокую вероятность возникновения проблем при использовании в качестве пользовательских данных. Это предназначено для использования в автоматическом и ручном QA-тестировании; полезно, когда ваш инженер QA входит в бар. Зачем тестировать непослушные струны? Даже многомиллиардные компании с огромным количеством автоматизированного тестирования не могут найти все плохие…

GitHub — hermitcore / libhermit-rs на webdesignernews.com

Вклад

HermitCore-rs разрабатывается на GitHub.
Создайте свою собственную вилку, отправьте нам запрос на тяну и поговорите с нами на Slack.

Требования

Процесс сборки работает в настоящее время только на системах на базе x86 Linux . Строить
ядро и теги HermitCore-rs, которые вам нужны:

  • CMake
  • Netwide Assember (NASM)
  • Недавний компилятор хоста, такой как GCC
  • Крест-инструментальная цепочка HermitCore, то есть Binutils, GCC, newlib, pthreads
  • Компилятор ржавчины (ночной выпуск)
  • xargo, который может быть установлен с грузовой установкой xargo
  • Исходный код Rust для Xargo, который может быть установлен с компонентом rustup, добавляет rust-src .

Перекрестная инструментальная нить HermitCore-rs

Мы предоставляем готовые пакеты (в настоящее время только Ubuntu 18.04) от HermitCore-rs
Набор инструментов. Пакеты могут быть установлены следующим образом:

 $  echo    " deb [trusted=yes] https://dl.bintray.com/hermitcore/ubuntu bionic main "    |  sudo tee -a /etc/apt/sources.list
$ sudo apt-get -qq update
$ sudo apt-get install binutils-hermit newlib-hermit-rs pte-hermit-rs gcc-hermit-rs libomp-hermit-rs 

Если вы хотите самостоятельно построить инструментальную цепочку, посмотрите на ветку path2rs в репозитории
отшельник-набор инструменты.
Он содержит скрипты для создания всей инструментальной цепочки для HermitCore-rs.

В зависимости от того, как вы хотите использовать HermitCore-rs, вам могут потребоваться дополнительные пакеты
таких как:

  • QEMU ( apt-get install qemu-system-x86 )

Строительство

Предварительная работа

В качестве первого шага необходимо клонировать хранилище и его подмодули:

 $ git clone git@github.com: hermitcore / libhermit-rs.git
$  cd  libhermit-rs
$ git подмодуль init
Обновление $ git subodule 

Построение библиотечных операционных систем и их примеров

Чтобы построить ядро ​​Rust и его примеры, перейдите в каталог с исходным кодом
и выполните следующие команды:

 $ mkdir build
$  cd  сборка
$ cmake ..
$ make
$ sudo make install 

Если ваша инструментальная цепочка не находится в / opt / hermit / bin тогда вам нужно поставить
его расположение к команде cmake выше, например:

 $ cmake -DTOOLCHAIN_BIN_DIR = / home / user / hermit / bin .. 

Предполагая, что бинарные файлы, такие как x86_64-hermit-gcc и друзья, находятся в этом
каталог.
Чтобы установить новую версию в тот же каталог, вам необходимо установить путь установки и установить HermitCore-rs следующим образом:

 $ cmake -DTOOLCHAIN_BIN_DIR = / home / user / hermit / bin -DCMAKE_INSTALL_PREFIX = / home / user / hermit ..
$ make
$ make install 

Примечание: Если вы используете кросс-компилятор вне этого репозитория, он использует библиотечную операционную систему, расположенную
с помощью инструментальной цепочки (например, /opt/hermit/x86_64-hermit/lib/libhermit.a ).

Прокси

Часть HermitCore — это небольшой вспомогательный инструмент, который называется прокси .
Этот инструмент помогает запускать приложения HermitCore на виртуальной машине или голой части на узле NUMA.
В принципе это мост к системе Linux.
Если прокси зарегистрирован как загрузчик системы Linux, приложения HermitCore могут запускаться как обычные приложения Linux.
Прокси можно зарегистрировать с помощью следующей команды:

 $ sudo -c sh   ' echo ": отшельник: M: 7: \ x42 :: / opt / hermit / bin / proxy:"> / proc / sys / фс / binfmt_misc / регистр    

Приложения могут быть затем вызваны так:

 $ / opt / отшельник / x86_64-отшельник / дополнительные / тесты / привет 

В противном случае прокси-сервер должен быть запущен напрямую и в качестве аргумента нуждается в пути к приложению HermitCore:

 $   #  с использованием QEMU 
$ HERMIT_ISLE = qemu / opt / hermit / bin / proxy / opt / hermit / x86_64-отшельник / дополнительные / тесты / привет 

После этого прокси-сервер запускает приложение HermitCore внутри виртуальной машины или голосовой металл на узле NUMA.

Тестирование

Как классический автономный одноядерник в виртуальной машине

Приложения HermitCore могут быть непосредственно запущены как автономное ядро ​​в пределах
виртуальная машина:

 $  cd  сборка
$ make install DESTDIR =  ~  / отшельник
$  cd   ~  / hermit-build / opt / отшельник
$   #  с использованием QEMU 
$ HERMIT_ISLE = qemu bin / proxy x86_64-отшельник / дополнительные / тесты / привет
$   #  с использованием uHyve 
$ HERMIT_ISLE = uhyve bin / proxy x86_64-отшельник / дополнительные / тесты / привет 

С HERMIT_ISLE = qemu приложение будет запущено в виртуальной машине QEMU.
Обратите внимание, что загрузчик требует QEMU и использует KVM по умолчанию.
Кроме того, он ожидает, что исполняемый файл называется qemu-system-x86_64 .

С HERMIT_ISLE = uhyve приложение будет запущено в тонком
гипервизор, основанный на KVM API Linux, и поэтому требуется поддержка KVM .
uhyve имеет значительно меньшее время запуска, чем QEMU.
В принципе, это расширение уквм.

В этом контексте переменная среды HERMIT_CPUS указывает количество
CPU (и уже не диапазон идентификаторов ядра). Кроме того, переменная HERMIT_MEM
определяет размер памяти виртуальной машины. Суффиксы M и G могут быть
используется для указания значения в мегабайтах или гигабайтах соответственно. По умолчанию
loader инициализирует систему с одним ядром и 2 гигабайтами RAM.
Например, следующая команда запускает тест потока на виртуальной машине, который
имеет 4 ядра и 6 ГБ памяти:

 $ HERMIT_ISLE = qemu HERMIT_CPUS = 4 HERMIT_MEM = 6G bin / proxy x86_64-отшельник / дополнительные / контрольные точки / поток 

Чтобы включить устройство Ethernet для uhyve мы должны настроить устройство крана на
хост-системы. Например, следующая команда устанавливает устройство крана
tap100 на Linux:

 $ sudo ip tuntap add tap100 mode tap
$ sudo ip addr Добавить 10.0.5.1/24 broadcast 10.0.5.255 dev tap100
$ sudo ip link  set  dev tap100 up
$ sudo bash -c   ' echo 1> / proc / sys / net / ipv4 / conf / tap100 / proxy_arp '   

По умолчанию сетевой интерфейс uhyve использует 10.0.5.2 как IP-адрес, 10.0.5.1
для шлюза и 255.255.255.0 в качестве сетевой маски.
Конфигурация по умолчанию может быть перезаписана переменными окружения
HERMIT_IP HERMIT_GATEWAY и HERMIT_MASk .
Чтобы включить устройство, HERMIT_NETIF должно быть установлено на имя устройства крана.
Например, следующая команда запускает приложение HermitCore в ухиве
и позволяет поддерживать сеть:

 $ HERMIT_ISLE = uhyve HERMIT_IP =   " 10.0.5.3 "   HERMIT_GATEWAY =   " 10.0.5.1    HERMIT_MASK =   " 255.255.255.0 "   HERMIT_NETIF = tap100 bin / proxy x86_64-hermit / extra / tests / hello 

Если qemu используется как hyervisor, виртуальная машина эмулирует интерфейс Ethernet RTL8139 и открывает по крайней мере один порт TCP / IP.
Он используется для связи между приложением HermitCore и его прокси.
Используя переменную окружения HERMIT_PORT порт связи по умолчанию (18766) можно изменить.

В качестве многоядерного ядра на реальной машине

Скоро …

Создание собственных приложений HermitCore

Вы можете взять usr / tests в качестве отправной точки для создания собственных приложений. Все
требуется, чтобы вы включили
[...] /HermitCore/cmake/HermitCore-Application.cmake в приложении
CMakeLists.txt . Он не должен находиться внутри репозитория HermitCore.
Кроме этого, он должен вести себя как обычный CMake.

Отладка

Если приложение запущено через сделайте qemu отладка через GDB включена
по умолчанию на порту 1234. При запуске через прокси ( HERMIT_ISLE = qemu ) установите
HERMIT_DEBUG = 1 .

  $ gdb x86_64-отшельник / дополнительные / тесты / привет
(gdb) target extended-remote: 1234
Удаленная отладка с использованием: 1234
0xffffffff8100b542 в ?? ()
 

Советы

Оптимизация

Вы можете настроить флаг компилятора -mtune = name добавив -DMTUNE = имя в
команда cmake при настройке проекта.

Обратите внимание: если приложения запускаются в виртуальной машине, гипервизор должен
поддерживают указанное имя архитектуры.

Если QEMU запущен нашим прокси и переменной окружения установлен HERMIT_KVM
к 0 виртуальная машина не будет ускорена KVM. В этом случае
-mtune следует избегать.

TCP-соединения

Используя переменную окружения HERMIT_APP_PORT можно открыть дополнительный порт
установить соединение TCP / IP с вашим приложением.

Сбрасывание журнала ядра

Установив переменную окружения HERMIT_VERBOSE на 1 прокси-печать
сообщения журнала ядра на экран при завершении.

Трассировка сети

Установив переменную окружения HERMIT_CAPTURE_NET на 1 и
HERMIT_ISLE qemu QEMU фиксирует сетевой трафик и создает трассировку
файл qemu-vlan0.pcap . Вы можете проанализировать файл, например.
Wireshark.

Монитор

Если HERMIT_MONITOR установлено в 1 и HERMIT_ISLE qemu QEMU устанавливает
монитор, который доступен через telnet в порту 18767.
Используя переменную окружения HERMIT_PORT порт по умолчанию (18766) можно изменить для связи между приложением HermitCore и его прокси.
Подключение к системному монитору автоматически устанавливается на HERMIT_PORT + 1 то есть порт по умолчанию — 18767.

Кредиты

Emoji от HermitCore предоставляется бесплатно от EmojiOne.

GitHub — juliettepretot / npx-co-commit на webdesignernews.com

Запустите npx co-commit чтобы начать. — Установка не требуется.

? Справочная информация

GitHub позволяет вам соавтор коммитировать, добавив соавтором: name к сообщению о фиксации.

? Дополнительно (необязательно)

Чтобы ускорить рабочий процесс, вы можете предварительно установить совместное использование с помощью npm i -g co-commit .

Вы также можете использовать git flags с co-commit: например, git commit --all становится npx co-commit --all . Кроме того, вы можете пропустить подсказки с использованием флагов: например: -m «ваше сообщение о совершении» или -co «mariiapunda, juliettepretot» .

Зависимости

Git, NodeJs.

Авторы

GitHub — Tencent / omi на webdesignernews.com

English |简体 中文

 omi "width =" 300 "style =" max-width: 100%; "/> </p>
<h2 align= Omi: веб-инфраструктура следующего поколения в JavaScript 4kb

Объединить JSX, веб-компоненты, прокси, магазин, обновление пути вместе

Почему Оми?

  • Крошечный размер. ( 4kb gzipped)
  • Поддерживает TypeScript.
  • Реактивная привязка данных
  • На основе Shadow DOM
  • Легко отлаживается через расширение Omi DevTools [Install from Chrome WebStore]
  • Соблюдение тенденции браузера и дизайна API.
  • Объединить JSX и веб-компоненты в одну структуру.
  • Веб-компоненты также могут быть ориентированы на данные, UI = fn (данные) .
  • JSX — лучший опыт разработки (интеллектуальное завершение кода и подсказка). Выражение пользовательского интерфейса с наименьшим грамматическим шумом.
  • Оригинальная система Path Updating . Автоматическое автоматическое обновление потребление низкой мощности высокая степень свободы, отличная производительность, легкая интеграция requestIdleCallback
  • Попробуйте this.update метод при использовании системы хранения ! Он будет автоматически обновлять пользовательский интерфейс при изменении данных.
  • Посмотрите на Facebook React vs Web Components, Omi сочетает в себе свои преимущества и дает разработчикам свободу выбора 19459017 .
  • Shadow DOM объединяется с Virtual DOM Omi использует как виртуальную DOM, так и реальную DOM DOW, чтобы сделать просмотр обновлений более точным и быстрым.
  • В системе Store 99,9% проектов не требуют путешествий во времени, и не только Redux может путешествовать, пожалуйста, не придумывайте Redux, система магазинов Omi может удовлетворить все проекты
  • Лучшее решение с CSS — это Shadow DOM сообщество, разбивающее фреймворки и библиотеки для Scoped CSS (с использованием стилей записи JS или JSON, таких как Radium, jsxstyle, стиль, привязка к webpack с использованием сгенерированного уникального className filename-classname-hash такого как CSS-модули, Vue), являются хакерскими технологиями; и Shadow DOM Style — идеальное решение .

Сравнить TodoApp от Omi и React, Omi и React, рендеринг структуры DOM:

Оми React
Добавить Оми в одну минуту

Эта страница демонстрирует использование Omi без инструмента для сборки .

 
< HTML >

< глава >
   meta   charset  =   " UTF-8 "   />
  < название > Добавить Оми в одну минуту </  название >
</  глава >

< тело >
     src  =   " https://unpkg.com/omi "  > </  ] сценарий >
  < сценарий > 
  const  { WeElement  h  render  определяют }  =  Оми 

  класс   LikeButton   распространяется   WeElement  {
  установить  () {
      =  {понравилось :   false } 
} 

   () {
 если  ( это .  данные .  понравилось ) {
  return    ' Вам понравилось. '   
} 

  возвращение   h  (
      
 {
  onClick  :  ()  =>  {
  это .  данные .  понравилось   =   true  
  это .  обновление  () 
} 
}, 
   '    
) 
} 
} 

  определяют  (  » аналогичная кнопка  ' LikeButton) 

    h  (  » аналогичная кнопка   ),   ' тела   ) 
  </  сценарий >
</  тела >

</  HTML > 

Вы также можете использовать тег как кнопка непосредственно в HTML:

 < тело >
  < как-кнопки  > </  как-кнопки  >
</  тела > 

Начало работы

Установите

 $ npm i omi-cli-g   #  установить cli 
$ omi init your_project_name   #  init project, вы также можете выполнить команду 'omi init' в пустой папке 
$  cd  your_project_name   # пожалуйста, проигнорируйте эту команду, если вы выполнили 'omi init' в пустой папке 
$ npm start   #  разработать 
$ npm run build   #  выпуск  

Описание в каталоге:

  ├─ config
├─ общественность
├─ скрипты
├─ src
│ ├─ активы
│ ├─ elements // Хранить все пользовательские элементы
│ ├─ store // Хранить все это хранилище страниц
│ ├─ admin.js // Запись js компилятора, будет создана для admin.html
│ └─ index.js // Запись js компилятора, будет создана для index.html
 

Автосозданные строительные леса CLI основаны на одностраничном приложении create-response-app, которое будет преобразовано в многостраничное, с проблемами конфигурации, чтобы увидеть руководство пользователя для создания-реагирования-приложения

Hello Element

Определите пользовательский элемент, расширив WeElement базовый класс и назовите его с помощью @tag decorator:

  import  { tag  WeElement  render }  из     оми   

@  Тег  (   Привет-элемент   )
 класс   HelloElement   extends   WeElement  {

     onClick   =  ( evt )  =>  {
          //  триггер CustomEvent 
               abc  ' {name :     dntzhang  ' возраст :   12 })
         ЭВТ .  stopPropagation  ()
    }

     css  () {
       возвращение    ` 
 div {
 цвет: красный; 
 курсор: указатель; 
}  ` 
    }

     render  ( реквизит ) {
       возвращение  (
         < div onClick  =  { это .  onClick } > 
          Привет [ реквизит .  msg } { реквизит .  propFromParent }
           < div >       <  /  div > 
         <  /  DIV > 
      )
    }
} 

Использование hello-element :

  import  { tag  WeElement  render }  из     оми   
 импорт    ' ./ hello-element '  

@  Тег  (   мое-приложение   )
 класс   MyApp   распространяется   WeElement  {
   static   get   данные  () {
        {abc :      ' passToChild :      ' }
  }

    //  bind CustomEvent 
   onAbc   =  ( evt )  =>  {
        //  получить данные evt по evt.detail 
           abc   =       $ {  ЭВТ .  подробно .  имя  }    ` 
       это .  Обновление  ()
  }

   css  () {
     возвращение    ` 
 div {
 цвет: зеленый; 
}  ` 
  }

     реквизит  данные ) {
     возвращение  (
       < DIV > 
        Привет [ реквизит .  имя } { данные .  abc }
           -  элемент onAbc  =  {   onAbc } prop  -  из  -  parent  =  { данные .  passToChild } msg  =    " WeElement  "  > <  /  Привет  -  элемент > 
       <  /  DIV > 
    )
  }
}

   < мое  -  название приложения  =    ' Omi v4.0 '   >   /  мой  -  приложение >   ' тело   ) 

Скажите Бабелю, чтобы превратить JSX в Omi.h () звонок:

 {
     presets  " : [ "  env  "   " оми "  ]
} 

Для поддержки вышеуказанной конфигурации необходимо установить следующие два пакета NPM:

   " babel-preset-env "  :   " ^ 1.6.0 "  ,
  " babel-preset-omi "  :   " ^ 0,1.1 "   , 

Если вы не хотите писать CSS в JS, вы можете использовать to-string-loader,
Например, следующая конфигурация:

 {
  :    /   [   |   / ]  _  [ ]  S ]   *   .  CSS  $   /  ,
  использование :  [
       в строке-загрузчик   ,
       CSS-погрузчик   
  ]
} 

Если ваш файл CSS начинается с « _ », CSS будет использовать для-string-loader ., Например:

  import  { tag  WeElement   render }  из    ' оми   

  //  typeof cssStr является строкой 
 импорт   cssStr   из    ' ./_ index.css '  

@  Тег  (   мое-приложение   )
 класс   MyApp   распространяется   WeElement  {

   css  () {
     возвращение  cssStr
  }
   ... 
   ... 
   ...  

TodoApp

Вот относительно полный пример TodoApp:

  import  { tag  WeElement  render }  из     оми   

@  Тег  (   TODO-лист   )
 класс   TodoList   extends   WeElement  {
     render  ( реквизит ) {
         возвращение  (
             < уль > 
                {19459049] реквизит .  предметы .  карта  ( пункт   => 
                     < li key  =  { Пункт .  id } >  { Пункт .  текст }  <  /  Li > 
                ))}
             <  /  уль > 
        );
    }
}

@  Тег  (   TODO-приложение   )
 класс   TodoApp   extends   WeElement  {
   static   get   данные  () {
      {пункты :  []текст :      ' }
  }

   render  () {
     возвращение  (
       < DIV > 
         < Н3 >   TODO   <  /  Н3 > 
         < todo  -  перечислил элементы  =  { .  данные .  пункты }  /  > 
         < форма onSubmit  =  { этот .  рукояткаSubmit } > 
           < вход
            ID  =    " новый список задачи "  
            OnChange  =  { это .  handleChange }
            значение  =  { это .  Данные .  текст }
           /  > 
           < Кнопка > 
                  .  длина   +   1 }
           <  /  Кнопка > 
         <  /  форма > 
       <  /  DIV > 
    );
  }

   handleChange   =  ( e )  =>  {
         текст   =   e .  Цель .  значение 
  }

   handleSubmit   =  ( e )  =>  {
     е   preventDefault  ().
    если     это .  данные .  текст .  обрезка  ().  длина ) {
       возвращение ;
    }

     это .  Данные .  элементов .  толчок  ({
      текст :   это .  данные .  текст ,
      id :   Дата .  сейчас  ()
    })
       данные .  текст   =        ;
     это .  Обновление  ()
  }
}

   < todo  -  приложение  /  >   ' тело   ) 

Магазин

Попробуйте this.update метод при использовании системы магазинов! При изменении данных он будет автоматически обновлять пользовательский интерфейс. Мощная архитектура Store отличается высокой производительностью, поскольку все данные монтируются в хранилище, за исключением компонентов, которые полагаются на опоры для определения состояния компонента.

  экспорт   по умолчанию  {
  данные :  {
    пункты :  [],
    текст :    ' '  ,
    firstName :    ' dnt '  ,
    lastName :    ' zhang '  ,
     fullName  :   функция  () {
       возвращение   это .  firstName   +   это .  lastName 
    },
    :     abc  '   //  Изменить, он обновит все элементы без изменения компонентов и страницы, объявляющих зависимость данных. 
    ccc : : :   1 }   //  Изменить это будет обновлять все элементы без изменения компонентов и объявления страниц. зависимость. 
  },
       globalPropTest  '  '  ccc.ddd  ' ],
   добавить  :   function  () {
    если     это .  данные .  текст .  обрезка  ().  длина ) {
       возвращение ;
    }
     это .  Данные .  элементов .  толчок  ({
      текст :   это .  данные .  текст ,
      id :   Дата .  сейчас  ()
    })
       данные .  текст   =       
  }
    //  Значение по умолчанию - false, значение true будет обновлять все экземпляры при изменении данных. 
    //  updateAll: true 
} 

Пользовательский элемент требует объявления зависимых данных, так что Omi сохраняет вычислительный путь зависимости на основе данных, объявленных на пользовательском компоненте, и обновляет их локально по мере необходимости. Например:

  класс   TodoApp   распространяется   WeElement  {
    //  Если вы используете хранилище, данные используются только для объявления зависимостей. 
   static   get   данные  () {
      {пункты :  []текст :      ' }
  }
    //  ... 
   handleChange   =  ( e )  =>  {
           текст   =   e .  цель .  значение 
  }

   handleSubmit   =  ( e )  =>  {
     е .  preventDefault  ()
     это .  магазин .  добавить  ()
  }
} 

  • Логика данных инкапсулирована в методе определения хранилища (например, store.add ).
  • Взгляды — это только ответственные за передачу данных для хранения таких как вызов store.add или установка store.data.text сверху.

Вам нужно ввести магазин из корневого узла во время рендеринга, чтобы использовать этот магазин:

    < todo  -  приложение  /  >    тело  ' магазин) 

→ Сохранить исходный код

Резюме:

  • store.data используется для отображения всех атрибутов и значений по умолчанию (кроме компонентов представления, определенных реквизитами).
  • Данные компонента и страницы используются для перечисления атрибутов зависимого store.data (Omi будет записывать путь) и обновления по запросу.
  • Если на странице несколько простых компонентов, updateAll может быть установлено в true а компонентам и страницам не нужно декларировать данные, и они не обновляются по запросу
  • Путь, объявленный в globalData обновляет все страницы и компоненты, изменяя значение соответствующего пути, который может использоваться для отображения всех страниц или большинства путей общедоступных свойств

Жизненный цикл

Метод жизненного цикла Когда его назовут
установите перед тем, как компонент подключится к DOM
установлен после того, как компонент подключается к DOM
удалить до снятия с DOM
BeforeUpdate до render ()
AfterUpdate после render ()

Компонентная экосистема

Я считаю, что вы можете легко преобразовать элементы веб-компонентов в элементы omi.

Отладка

Используя Omi DevTools, вы можете просто отлаживать и управлять своим пользовательским интерфейсом без какой-либо конфигурации . Просто установите и отлаживайте.

Поскольку Omi использует веб-компоненты и Shadow-DOM, ему не нужно иметь другую панель элементов, такую ​​как React или Vue. Он просто добавляет панель к боковой панели элементов и она настолько же эффективна, как и React и Vue DevTools.

Поддержка браузеров

Omi 4.0+ работает в последних двух версиях всех основных браузеров: Safari 10+, IE 11+ и вечнозеленых Chrome, Firefox и Edge.

Ссылки

Вклад

  1. Вилка (https://github.com/Tencent/omi/fork)
  2. Создайте свою ветку ( git checkout -b мое-срочное исправление )
  3. Зафиксируйте свои изменения ( git commit -am «Исправлено что-то» )
  4. Нажмите на ветку ( git push origin my-emergency-hotfix )
  5. Создайте новый запрос Pull

Пожалуйста, свяжитесь с нами по любым вопросам:

Лицензия

MIT © Tencent

GitHub — umpox / TinyEditor на webdesignernews.com

Использование

Вставьте следующий код в адресную строку браузера:

  данные: текст / html, <body oninput = "i.srcdoc = h.value + ' ' «>