
Исправленный компилятор шаблонов Vue 2.7.16 с исправлениями для CVE‑2024‑6783 и CVE-2024-9506
Версия vue-template-compiler с исправлениями безопасности для устранения уязвимости загрязнения прототипа (CVE-2024-6783) и уязвимости ReDoS (CVE-2024-9506).
Основано на [email protected]. Разработка и обсуждение проблем ведутся в vue-patched.
Если вы используете полную сборку Vue (runtime + компилятор) или CDN-версию vue.js, также замените vue на vue-patched.
Этот пакет можно использовать для предварительной компиляции шаблонов Vue 2.0 в render-функции, чтобы избежать накладных расходов на компиляцию во время выполнения и ограничений CSP. В большинстве случаев его следует использовать вместе с vue-loader; отдельно он понадобится только при создании инструментов сборки с очень специфическими требованиями.
Выберите способ установки, который вам больше подходит.
Устанавливает пропатченный компилятор под исходным именем vue-template-compiler, поэтому peer-зависимости остаются удовлетворёнными, а существующие обращения к пакету продолжают разрешаться (например, в @vue/test-utils).
npm install vue-template-compiler@npm:vue-template-compiler-patched@^2.7.16-patch.3 --save-dev
pnpm add vue-template-compiler@npm:vue-template-compiler-patched@^2.7.16-patch.3 --save-dev
yarn add vue-template-compiler@npm:vue-template-compiler-patched@^2.7.16-patch.3 --dev
Устанавливает компилятор как vue-template-compiler-patched. Используйте этот метод, если вам нужен только прямой доступ к пропатченной сборке. Инструменты, которые разрешают vue-template-compiler по имени пакета, не обнаружат его.
npm install vue-template-compiler-patched --save-dev
pnpm add vue-template-compiler-patched --save-dev
yarn add vue-template-compiler-patched --dev
import compiler from 'vue-template-compiler-patched'
// or: const compiler = require('vue-template-compiler-patched')
Компилирует строку шаблона и возвращает скомпилированный код JavaScript. Возвращаемый результат представляет собой объект следующего формата:
{
ast: ?ASTElement, // parsed template elements to AST
render: string, // main render function code
staticRenderFns: Array<string>, // render code for static sub trees, if any
errors: Array<string> // template syntax errors, if any
}
Обратите внимание, что возвращаемый код функции использует with и поэтому не может использоваться в коде строгого режима.
outputSourceRange новое в 2.6
booleanfalseУстановка значения true приведёт к тому, что errors, возвращаемые в скомпилированном результате, станут объектами вида { msg, start, end }. Свойства start и end — это числа, отмечающие диапазон кода источника ошибки в шаблоне. Это можно передать в API compiler.generateCodeFrame для генерации фрагмента кода для ошибки.
whitespace
string'preserve' | 'condense''preserve'Значение по умолчанию 'preserve' обрабатывает пробельные символы следующим образом:
Если установлено 'condense':
Использование режима condense приведёт к меньшему размеру скомпилированного кода и незначительному улучшению производительности. Однако в некоторых случаях это вызовет незначительные визуальные различия в макете по сравнению с обычным HTML.
Эта опция не влияет на тег <pre>.
Пример:
<!-- source -->
<div>
<span>
foo
</span> <span>bar</span>
</div>
<!-- whitespace: 'preserve' -->
<div> <span>
foo
</span> <span>bar</span> </div>
<!-- whitespace: 'condense' -->
<div><span> foo </span> <span>bar</span></div>
modules
Можно подключиться к процессу компиляции для поддержки пользовательских возможностей шаблонов. Однако учтите, что при внедрении пользовательских модулей времени компиляции ваши шаблоны не будут работать с другими инструментами сборки, основанными на стандартных встроенных модулях, например vue-loader и vueify.
Массив модулей компилятора. Подробности о модулях компилятора см. в типе ModuleOptions в объявлениях flow и во встроенных модулях.
directives
Объект, где ключ — это имя директивы, а значение — функция, преобразующая узел AST шаблона. Например:
compiler.compile('<div v-test></div>', {
directives: {
test (node, directiveMeta) {
// transform node based on directiveMeta
}
}
})
По умолчанию директива времени компиляции будет извлечена, и директива не будет присутствовать во время выполнения. Если вы хотите, чтобы директива также обрабатывалась определением времени выполнения, верните true в функции transform.
Обратитесь к реализации некоторых встроенных директив времени компиляции.
preserveWhitespace Устарело с версии 2.6
booleantrueПо умолчанию скомпилированная функция рендеринга сохраняет все пробельные символы между HTML-тегами. Если установлено значение false, пробелы между тегами будут игнорироваться. Это может немного улучшить производительность, но может повлиять на макет для строчных элементов.
Аналогично compiler.compile, но напрямую возвращает экземпляры функций:
{
render: Function,
staticRenderFns: Array<Function>
}
Это полезно только во время выполнения при использовании предварительно настроенных сборок, поэтому метод не принимает никаких параметров времени компиляции. Кроме того, этот метод использует new Function(), поэтому он несовместим с CSP.
2.4.0+
То же, что и compiler.compile, но генерирует код функции рендеринга, специфичный для SSR, путём оптимизации частей шаблона в конкатенацию строк для повышения производительности SSR.
Это используется по умолчанию в vue-loader@>=12 и может быть отключено с помощью опции optimizeSSR.
2.4.0+
То же, что и compiler.compileToFunction, но генерирует код функции рендеринга, специфичный для SSR, путём оптимизации частей шаблона в конкатенацию строк для повышения производительности SSR.
Разбирает SFC (однофайловый компонент, или файл *.vue) в дескриптор (см. тип SFCDescriptor в объявлениях flow). Это используется в инструментах сборки SFC, таких как vue-loader и vueify.
Генерирует фрагмент кода, который выделяет часть в template, определённую параметрами start и end. Полезно для сообщения об ошибках в инструментах более высокого уровня.
pad