1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xishankeji-xsloader4j

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

1. Проект

Обеспечить поддержку Java Web-проекту для JavaScript ES6+, *.scss, *.less, *.vue, *.jsx, *.ts и других.

2. Версия

Текущая версия: 1.3.5

https://mvnrepository.com/artifact/com.xishankeji/xsloader4j-core

Version JDK 1.8

Github

码云

3. Среда выполнения

  • JDK 8;
  • servlet3;
  • Windows, Linux, Mac;
  • maven3.

Рекомендуемые IDE

  • idea.

Тестируемая среда

  • Jdk8;
  • Windows10, windows server 2018;
  • CentOS 7.4, 7.5, 7.8, 7.9.

Внимание (WARNING): в среде Linux может потребоваться обновить libstdc++.so.

Для некорневого пользователя можно использовать следующий способ:
export LD_PRELOAD=/.../libstdc++.so.6.0.28

4. Установка

  • Spring boot версия:
<dependency>
    <groupId>com.xishankeji</groupId>
    <artifactId>xsloader4j-spring-boot-embed-starter</artifactId>
    <version>1.3.5</version>
</dependency>
  • Обычная версия servlet (проект работает как war-пакет в контейнерах tomcat, jetty и т. д.):
<dependency>
    <groupId>com.xishankeji</groupId>
    <artifactId>xsloader4j-core</artifactId>
    <version>1.3.5</version>
</dependency>

5. Конфигурация

1. Запуск конфигурации

В каталоге ресурсов (например, src/main/resources) создайте файл xsloader4j.properties:

— xsloader.js загрузчик доступа путь: /contextPath/xsloader.js

xsloader.es6.polyfill=true
xsloader.es6.debug=true
xsloader.es6.name=default
xsloader.sourcemap=true
xsloader.es6.dealt.ignores=
xsloader.es6.dealt.static=
xsloader.es6.extensions=
xsloader.es6.detectBrowser=true
xsloader.es6.v8flags=
xsloader.conf.properties.staticUrlPrefix=https://xxxxx.cn/xxx
xsloader.conf.properties.prop1=xxx
xsloader.htmv.enable=false
xsloader.htmv.paths[0]=* to /WEB-INF/htmv/default.html
xsloader.htmv.paths[1]=/mobile/ to /WEB-INF/htmv/mobile.html
xsloader.react.autojs=true
xsloader.react.product=true
xsloader.htmr.paths[0]=* to /WEB-INF/htmr/default.html
xsloader.htmr.paths[1]=/mobile/ to /WEB-INF/htmr/mobile.html
xsloader.ctrl.enable=false
xsloader.embed.enable=true

— xsloader.es6.polyfill: использовать polyfill, true для автоматического загрузки polyfill, по умолчанию true. — xsloader.es6.debug: режим отладки, true означает, что после изменения файла будет выполнен повторный анализ. — xsloader.es6.name: имя каталога, по умолчанию default, полезно, когда несколько проектов используют один и тот же временный каталог. — xsloader.sourcemap: преобразовать source map. — xsloader.es6.dealt.ignores: игнорировать каталоги преобразования, разделенные запятыми, например «/static/lib1,/static/lib2». — xsloader.es6.dealt.static: статический ресурс в пути к ресурсам (используется в spring boot встроенной версии), например, «/static», несколько значений разделены запятыми. — xsloader.es6.extensions: суффикс скрипта, можно опустить указанный суффикс в расширениях (но путь должен содержать / разделитель), по умолчанию «.js,.vue,.jsx,.ts,.jsr,.jtr,/index.js,/index.vue,/index.jsx,/index.ts,/index.jsr,/index.jtr», и значение может быть только [.js,.vue,.jsx,.ts,.jsr,.jtr,/index.js,/index.vue,/index.jsx,/index.ts,/index.jsr,/index.jtr]. — xsloader.es6.detectBrowser: анализировать разные уровни js в соответствии с версией браузера, по умолчанию — true. — xsloader.conf.properties.xxx: параметры могут быть непосредственно использованы в файле конфигурации xsloader с помощью #{propName}. — xsloader.htmv.enable: включить htmv, по умолчанию false. — xsloader.htmv.paths: настроить шаблон HTML по умолчанию (необязательно). classpath: начало указывает на каталог ресурсов, другие указывают на веб-путь (полученный через servletContext.getRealPath). — xsloader.conf.forceCacheSeconds: время, в течение которого браузер принудительно кэширует. — xsloader.es6.versionAppendTag: если этот тег установлен, после изменения файла он будет добавлен в конец этого тега; если за этим тегом следует запятая, перед ним должна стоять запятая. — xsloader.react.autojs: по умолчанию true, импортировать ли встроенные зависимости react. — xsloader.react.product: по умолчанию true, использовать ли встроенные зависимости реакции в режиме продукта. — xsloader.ctrl.enable: по умолчанию true, добавить ли параметр управления в ответ конфигурации. — xsloader.embed.enable: глобальный переключатель //!embed, по умолчанию true.

2. Конфигурация xsloader

Создайте файл xsloader-conf.js в каталоге ресурсов (например, src/main/resources):

— Доступ к этому файлу конфигурации: /contextPath/xsloader.conf — Обратите внимание, что этот файл конфигурации является объектом JSON в формате JS, который поддерживает JS-скрипты. — Для получения более подробной информации о конфигурации этого файла см.: Конфигурация модуля загрузчика xsloader. — Параметры конфигурации могут ссылаться на #{propName}, а contextPath по умолчанию равен текущему параметру контекста сервлета. — Время кеширования этого файла конфигурации составляет 30 секунд, и urlArgs может контролировать версию других ресурсов, чтобы эффективно избежать проблем с кешем. dataMain || "./es-main/{name}.js"; }, "before": function() { console.log("before:" + name); }, "after": function() { console.log("after:" + name); } }, "chooseLoader": function(localConfig) { var path = this.getPagePath(); if (xsloader.startsWith(path, "/test1/")) { return "test1"; } else if (xsloader.startsWith(path, "/test2-no-vue/")) { return "test2-no-vue"; } else { return "test1"; } }, "loader": { "test1": { "baseUrl": "${contextPath}/", "modulePrefix": "$[libReplace]", "urlArgs": { "*[${contextPath}/": "v=20200130-02", "*[libxs/": "v=20200129-3", "*[lib/": "v=190109-26", "*[libui/": "v=190109-26" }, "paths": { "vue": "static/vue/vue.min.js" }, "deps": { "*": "vue" //当有vue组件或jsx语法时,一定要先加载vue模块 } }, "test2-no-vue": { "baseUrl": "${contextPath}/", "modulePrefix": "$[libReplace]", "urlArgs": { "*[${contextPath}/": "v=20200130-02", "*[libxs/": "v=20200129-3", "*[lib/": "v=190109-26", "*[libui/": "v=190109-26" }, "paths": {}, "deps": {} } }, "getPagePath": function() { var path = location.pathname.substring(this.properties.contextPath.length); return path; }, "sporter": "${contextPath}/", "fromPath": function(path) { return location.protocol + "//" + location.host + this.sporter + path; }, "beforeDealProperties": function() {} ``` import "css!static/test.scss"; // не является путём, начинающимся с "." относительно baseUrl import Vue from "vue"; import comp1 from "./vue/comp1.vue"; // необходимо добавить расширение файла, текущий каталог должен использовать "./", иначе он относится к baseUrl

console.log(thiz.getUrl()); // http://localhost:8070/test1/es-main/index.js?v=20200130-02 console.log(thiz.getUrl("./lib/other.js")); // http://localhost:8070/test1/es-main/lib/other.js?v=20200130-02

new Vue({ el:"#vue-app", template:"#app-template", methods:{ getVnode(){ return (

из функции

); }, onClickVnodex($event){ alert("onClickVnodex:"+$event); }, onClickp($event){ alert("onClickp:"+$event); } }, components:{ comp1, comp2:()=>import("./jsx/comp2.jsx") // поддержка асинхронной загрузки } });

## 7. Другие инструкции
### 1. Упаковка
- После упаковки в виде war-пакета для указанной системы размер увеличится примерно на 20 Мб. Например, при упаковке для запуска в системе Linux можно исключить зависимости j2v8 для Windows и Mac в `pom.xml`:

```xml
<build>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.2</version>
            <configuration>
                <packagingExcludes>
                    <!-- Исключаем зависимости j2v8 для Windows и Mac, по умолчанию упаковывается для работы в Linux -->
                    WEB-INF/lib/j2v8_win**.jar,WEB-INF/lib/j2v8_macosx**.jar
                </packagingExcludes>
            </configuration>
        </plugin>
    </plugins>
</build>
  • Если вы работаете в среде Mac, вам нужно самостоятельно добавить зависимость:
<dependency>
    <groupId>com.eclipsesource.j2v8</groupId>
    <artifactId>j2v8_macosx_x86_64</artifactId>
    <version>4.6.0</version>
</dependency>

2. Импорт других библиотек

  • Импортируемые сторонние библиотеки должны соответствовать спецификации AMD.
  • Обычно упакованные сторонние модули UMD могут нормально работать, вы можете обратиться к проекту demo-servlet.
  • Примечание: при импорте других компонентов или модулей можно опустить суффикс, указанный в конфигурации xsloader.es6.extensions.

3. Преобразование кода

3.1) *.js

  • Поддержка синтаксиса до es2018.
  • Поддерживает синтаксис JSX.
  • Некоторые IDE временно не поддерживают синтаксис JSX, можно использовать следующий метод, чтобы избежать путаницы: (перед компиляцией Java-сервер удалит \jsx и jsx\ из файлов Vue).
  • Встроенный компонент <jsx> (необходимо настроить глобальный модуль Vue), через атрибут x (возвращает функцию или объект JSX, который может напрямую отображать скомпилированный объект JSX).
  • Автоматическое определение синтаксиса файла JavaScript, когда есть одно из следующих утверждений, будет выполнено преобразование:
let ...
import ...
export ...
const ...

Переменная thiz указывает на текущий модуль, для получения дополнительной информации см. xsloader's this

  • При наличии компонентов Vue, синтаксиса JSX или HTMLV необходимо установить зависимость Vue2 в файле конфигурации loader:
{
  "paths": {
    "vue": "путь к вашему vue2/vue.min.js"
  },
  "deps": {
    "*": "vue"
    // Когда есть компоненты Vue, синтаксис JSX или HTMLV, обязательно сначала загрузите модуль Vue
  }
}

3.2) *.ts

  • Файлы сценариев TypeScript.
  • Не поддерживает синтаксис JSX.

3.3) *.vue

<template>

</template>
<script>

</script>

<style lang="scss" scoped="true">

</style>
  • <script> поддерживает синтаксис JavaScript, аналогичный *.js.
  • Поддерживает синтаксис JSX.
  • В некоторых IDE временно не поддерживается синтаксис JSX, его можно использовать следующим образом, чтобы избежать путаницы: (перед компиляцией сервер Java удалит \jsx и jsx\ в файлах Vue).
return (`\jsx
    <div>HelloJSX</div>
\jsx`)
  • Добавьте атрибут $thiz в экземпляр Vue (аналогично переменной thiz в *.js), представляющий объект модуля, в котором находится Vue.
  • Установите для атрибута $keepVueStyle значение false в экземпляре Vue, что означает, что стиль также будет уничтожен при уничтожении.
  • Функция $destroyVueStyle() добавлена в экземпляр Vue для уничтожения стиля; при использовании перехода Vue <transition> вы можете установить для $keepVueStyle компонента, заключённого в переход, значение true, а затем вызвать эту функцию вручную после завершения анимации, чтобы уничтожить стиль.
  • Обратите внимание, что здесь, если для scoped установлено значение true, это просто добавит случайный класс к корневому элементу.
  • Стиль <style> может содержать несколько тегов style; scoped:true (scoped), false
1、Обратите внимание, что здесь, когда для scoped установлено значение true, это только добавляет случайный класс к корневому элементу.
2、Тег <style> может содержать несколько
  • При наличии компонентов Vue, синтаксиса JSX или HTMLV необходимо установить зависимость Vue2 в файле конфигурации loader:
{
  "paths": {
    "vue": "Путь к вашему vue2/vue.min.js"
  },
  "deps": {
    "*": "vue"
    // При наличии компонентов Vue, синтаксиса JSX или HTMLV обязательно сначала загрузите модуль Vue
  }
}

3.4) *.htmv

  • Этот файл фактически является файлом формата Vue, дополнительные сведения см. в разделе *.vue.
<!--settings:
{
    title:"Заголовок документа",
    noLoadingMask:false,
    heads:['<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">']
}
-->
<template>

</template>
<script lang>

</script>

<style lang="scss" scoped="true">

</style>
  • script lang поддерживает typescript или ts.
  • Вы можете использовать настройки json в комментариях для настройки документа:
  1. title: используется для установки заголовка документа.
  2. noLoadingMask: когда этому значению присвоено значение true, оно удалит загрузочный фрейм с идентификатором loading-mask.
  3. heads: используется для добавления в тег <head>.
  • Прямой доступ к файлу htmv через браузер (Java-сервер автоматически преобразует его), см. demo-servlet test1/index.htmv.
  • При наличии компонентов Vue, синтаксиса JSX или HTMLV необходимо установить зависимость Vue2 в файле конфигурации loader:
{
  "paths": {
    "vue": "Путь к вашему vue2/vue.min.js"
  },
  "deps": {
    "*": "vue"
    // При наличии компонентов Vue, синтаксиса JSX или HTMLV обязательно сначала загрузите модуль Vue
  }
}
  • Включить htmv, установив xsloader.htmv.enable=true. *3.2) .htmr

Данный файл фактически является файлом формата jsr, более подробную информацию см. в файле *.jsr.

Файл htmr не содержит тег <template>, после html-комментария <!----> требуется перенос строки, перед тегом <style> также требуется перенос строки.

Код на языке JavaScript может быть без тега script, тег style должен располагаться после кода JavaScript, код JavaScript не может содержать теги <style> и html-комментарии <!---->.

<!--settings:
{
    title:"文档标题",
    heads:['<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">']
}
-->
export default <h1>Hello, world!</h1>;

<style lang="scss" scoped="true">

</style>

Тег script поддерживает язык TypeScript.

Настройки документа выполняются через комментарий settings с использованием JSON:

  1. title: устанавливает заголовок документа;
  2. heads: используется для добавления в тег <head>.

Доступ к файлу htmr можно получить напрямую через браузер (на стороне Java будет выполнено автоматическое преобразование).

Для включения htmr необходимо установить xsloader.htmr.enable=true.

Если xsloader.react.autojs имеет значение false, необходимо настроить зависимости react и react-dom.

*4) .scss

Поддерживает синтаксис SCSS.

*5) .less

Поддерживает синтаксис LESS.

*6) .jsx

Эффект аналогичен эффекту файлов *.js.

При наличии компонентов Vue, синтаксиса JSX или htmv необходимо в конфигурационном файле loader настроить зависимость Vue:

{
  "paths": {
    "vue": "你的vue2的路径/vue.min.js"
  },
  "deps": {
    "*": "vue"
    //当有vue组件、jsx语法或htmv时,一定要先加载vue模块
  }
}

Свойства, классы и события задаются аналогично Vue $createElement:

<img attrs={{src:""}} class="test" style="" />

Подробные свойства:
{
  //class:принимает строку, объект или массив строк и объектов
  'class': {
    foo: true,
    bar: false
  },
  //style:принимает строку, объект, или массив объектов
  style: {
    color: 'red',
    fontSize: '14px'
  },
  //обычные HTML-атрибуты
  attrs: {
    id: 'foo'
  },
  //prop компонента
  props: {
    myProp: 'bar'
  },
  //DOM-свойства
  domProps: {
    innerHTML: 'baz'
  },
  // 事件-обработчики в on, но больше не поддерживают такие модификаторы, как v-on:keyup.enter. Необходимо обрабатывать keyCode вручную в функции обработки.
  on: {
    click: this.clickHandler
  },
  // Используется только для компонентов и используется для прослушивания собственных событий, а не событий, генерируемых vm.$emit.
  nativeOn: {
    click: this.nativeClickHandler
  },
  // Пользовательские директивы. Обратите внимание, что вы не можете присвоить значение oldValue в binding, потому что Vue автоматически синхронизирует его.
  directives: [
    {
      name: 'my-directive',
      value: '2',
      expression: '1 + 1',
      arg: 'foo',
      modifiers: {
        bar: true
      }
    }
  ],
  // Формат слота с ограниченной областью видимости:
  // { name: props => VNode | Array<VNode> }
  scopedSlots: {
    default: props => createElement('span', props.text)
  },
  // Если компонент является дочерним компонентом другого компонента, слот должен быть назван.
  slot: 'name-of-slot',
  // Другие специальные атрибуты верхнего уровня
  key: 'myKey',
  ref: 'myRef',
  //Если несколько элементов в рендеринге используют один и тот же ref, то $refs.myRef будет массивом.
  refInFor: true
}

7) .jsr,.jtr

Файлы с расширением .jtr имеют язык TypeScript, код написан в стиле React, синтаксис аналогичен JavaScript и JSX, свойства аналогичны React.

8) Объяснение объединения файлов

Через //!embed можно напрямую встраивать скрипты (только те, которые требуют преобразования кода) в текущий файл. Поддерживается рекурсия. Обратите внимание: нельзя опускать расширение файла.

//!embed
import "./embed/a.js";
import "./embed/b.js";
//!embed

9) Исходный код sourcemap

Преобразованный исходный код можно найти в консоли браузера на вкладке Sources в разделе /$$xs-sources$$/, поддерживается отладка скрипта.

4. Polyfill

Возможно, вам потребуется использовать polyfill для лучшей работы с кодом ES6+, например Map, array.includes, string.startsWith, async/await и т. д.

По умолчанию xsloader.es6.polyfill имеет значение true и автоматически загружает polyfill. В каталоге проекта polyfill/ можно скачать некоторые версии файлов JavaScript. Также можно перейти на сайт https://babeljs.io/docs/en/babel-polyfill/ и скачать оттуда.

cnpm install --save @babel/polyfill
Скопируйте файл polyfill.js из каталога node_modules/ в соответствующий каталог.

5. Описание xsloader.js

Этот плагин представляет собой загрузчик модулей на основе AMD (заимствован из RequireJS, но был переработан начиная с версии 1.2.x). Он поддерживает асинхронную загрузку модулей, разработку плагинов, более гибкие настройки зависимостей и разработку скриптов.

Встроенные плагины включают css, image, json, text, request и ifmsg.

xsloader-wiki

6. Получение исходного кода напрямую

Добавление __source=true к адресу запроса приведёт к возврату исходного кода. 2021/06/22

  1. Доработать xsloader для поддержки htmv.
  2. Обновить babel до версии 7.14.3.
  3. Обеспечить поддержку typescript, файлы должны иметь расширение .ts.
  4. Доработать xsloader: при импорте файлов с расширениями css, scss, sass и less автоматически добавлять префикс css!.
  5. Обеспечить поддержку react: файлы с расширением .jsr, а также поддержку typescript в react: расширение файлов .jtr.
  6. Поддерживать файлы с расширением *.htmr, которые можно напрямую открывать в браузере.
  7. Устранить проблему с анализом тегов в файлах vue.
  8. Добавить плагин xsloader4j-maven-plugin.
  9. Исправить ошибку компиляции scss при обработке импорта @import.

v1.2.49 2021/05/14

  1. Обновить babel до версии v7.13.15.
  2. Включить конфигурацию xsloader.es6.detectBrowser по умолчанию со значением true, чтобы активировать определение версии браузера и преобразование кода на разных уровнях.
  3. Обновить версию polyfill до 7.12.1.
  4. Ввести атрибут xsloader.__ignoreCurrentRequireDep для оптимизации скорости обработки вместе с xsloader.
  5. Конфигурация xsloader.htmv.paths: указать пути по умолчанию для HTML шаблонов (опционально). Если путь начинается с classpath:, это указывает на каталог ресурсов, в противном случае — на путь в веб-каталоге (получается через servletContext.getRealPath).
  6. Доработать функцию getUrl в xsloader, чтобы параметры на относительных адресах имели более высокий приоритет.

v1.2.36 2021/03/26

  1. Поддержка удаления специальных меток в staticInclude.
  2. Включение конфигурации xsloader.conf.forceCacheSeconds для управления временем принудительного кэширования конфигурационных файлов браузером.
  3. Включение конфигурации xsloader.es6.versionAppendTag для автоматического добавления номера версии.
  4. Улучшение автоматической генерации номеров версий, включая автоматическое добавление номеров версий к файлам с автоматическим добавлением расширений.
  5. Улучшение работы ScriptEnv.
  6. Исправление проблемы, когда xsloader.queryParam не использовал значение по умолчанию при получении пустой строки в качестве параметра.
  7. Улучшение функциональности ifmsg: закрытие страницы вызывает вызов close.
  8. Поддержка параметра urlArgs в сервисе xsloader для настройки общих параметров версии.

v1.2.19 2021/01/04

  1. Введение IConfigFileCheck.
  2. Исправление ошибки в xshttp, когда параметр является объектом при multiPart = true, и преобразование не происходит.
  3. Улучшение конфигурации xsloader.es6.extensions, которая по умолчанию включает .js, .vue, .jsx, /index.js, /index.vue, /index.jsx.
  4. При компиляции js,jsx,vue, добавлять xsloader.__currentPath.
  5. Добавление функции require().setTag(), что облегчает предоставление информации о тегах при загрузке зависимостей с ошибками.
  6. Исправление ошибки, когда try! в плагине xsloader.js не мог продолжить выполнение после неудачной загрузки модуля.
  7. Исправление ошибок в обработке протокола в xsloader.js.
  8. Добавление свойства aliasPaths в конфигурацию xsloader.js, которое позволяет настраивать псевдонимы модулей, начинающиеся не с точки, и может содержать символ /.
  9. Добавление режима одиночного экземпляра в Server в конфигурации xsloader.js ifmsg.

v1.2.6 2020/11/06

  1. Улучшение ScriptEnv.
  2. Когда java выбрасывает исключение в ScriptEnv, js также получает это исключение.
  3. Для файлов js некоторые IDE временно не поддерживают синтаксис jsx, но можно использовать следующий метод для предотвращения путаницы (перед компиляцией java серверная часть удалит \jsx и jsx\ из файлов Vue):
    • добавить <meta name="renderer" content="webkit"/> и <meta name="force-rendering" content="webkit"/> в файл default.html, чтобы предотвратить использование режима совместимости.

v1.2.1 2020/10/07

  1. Добавление демо Spring Boot.
  2. Обновление babel и polyfill.
  3. Поддержка преобразования кода до ES2018.
  4. Добавление параметра __source, который возвращает исходный код при значении true.
  5. Добавление примеров тестирования синтаксиса или функций (demo-servlet/src/main/webapp/lang/).

v1.1.60 2020/09/14

  1. Решение проблемы с утечкой памяти при использовании V8 для объектов или массивов, преобразованных из Map или Collection.
  2. Добавление конфигурации xsloader.es6.name.
  3. Добавление функции xsloader.hasDefined(name), которая проверяет, был ли модуль уже определён и выполнен.

v1.1.55 2020/08/21

  1. Улучшить ScriptEnv.
  2. Отображение URL в журналах предупреждений при компиляции js и vue.
  3. Поддержка строк и других элементов в <jsx>.
  4. Исправление проблемы, при которой код, переведённый из es6+ в es5, всё ещё определялся как es6.

v1.1.52 2020/07/10

  1. Расширение invoker в xsloader с помощью scriptSrc(), который принимает адресный параметр.
  2. Добавление атрибута heads в настройку settings в htmv.

v1.1.49 2020/06/24

  1. Решить проблему повторного onConnect в ifmsg.
  2. Решить проблему междоменного доступа при использовании ifmsg client в качестве переменной vue.
  3. Улучшить <jsx>, позволяя x быть пустым.

v1.1.46 2020/05/18

  1. Добавление appendArgs(url,forArgsUrl) в модуль объекта xsloader.js.
  2. Добавление переменной $thiz в экземпляр шаблона vue, представляющей текущий модуль vue.
  3. Поддержка файлов *.htmv для прямого отображения шаблонов vue.
  4. Исправлена ошибка в xsloader.js, связанная с преждевременной регистрацией компонента <jsx>, вызывающая ошибку отсутствия vue при использовании xsloader4j-server-bridge.
  5. Поддержка ifmsg в xsloader.js.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Пусть Java web-проект поддерживает JavaScript ES6+ (ES2015, ES2016, ES2017, ES2018), *.*scss, *.*less, *.*vue, *.*jsx. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/xishankeji-xsloader4j.git
git@api.gitlife.ru:oschina-mirror/xishankeji-xsloader4j.git
oschina-mirror
xishankeji-xsloader4j
xishankeji-xsloader4j
master