
Compilador de templates Vue 2.7.16 corrigido com correções para CVE‑2024‑6783 e CVE-2024-9506
Uma versão do vue-template-compiler com correções de segurança para a vulnerabilidade de poluição de protótipo (CVE-2024-6783) e a vulnerabilidade de ReDoS (CVE-2024-9506).
Baseado em [email protected]. O desenvolvimento e as issues ficam em vue-patched.
Se você usa o build completo do Vue (runtime + compilador) ou o vue.js via CDN, substitua também o vue por vue-patched.
Este pacote pode ser usado para pré-compilar templates do Vue 2.0 em funções de renderização, evitando a sobrecarga da compilação em tempo de execução e as restrições de CSP. Na maioria dos casos, você deve usá-lo com o vue-loader; você só precisará dele separadamente se estiver escrevendo ferramentas de build com necessidades muito específicas.
Escolha a abordagem de instalação que funciona melhor para você.
Instala o compilador corrigido sob o nome original vue-template-compiler, de modo que as dependências de par permaneçam satisfeitas e as consultas de pacotes existentes continuem a ser resolvidas (por exemplo, em @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
Instala o compilador como vue-template-compiler-patched. Use este método se você precisar apenas de acesso direto à build corrigida. Ferramentas que resolvem vue-template-compiler pelo nome do pacote não o detectarão.
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')
Compila uma string de template e retorna o código JavaScript compilado. O resultado retornado é um objeto no seguinte formato:
{
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
}
Observe que o código da função retornada usa with e, portanto, não pode ser usado em código em modo estrito.
outputSourceRange novo em 2.6
booleanfalseDefinir isto como true fará com que os errors retornados no resultado compilado se tornem objetos na forma de { msg, start, end }. As propriedades start e end são números que marcam o intervalo de código da origem do erro no template. Isto pode ser passado para a API compiler.generateCodeFrame para gerar um code frame para o erro.
whitespace
string'preserve' | 'condense''preserve'O valor padrão 'preserve' trata os espaços em branco da seguinte forma:
Se definido como 'condense':
Usar o modo condense resultará num tamanho de código compilado menor e num desempenho ligeiramente melhor. No entanto, produzirá pequenas diferenças de layout visual em comparação com HTML simples em certos casos.
Esta opção não afeta a tag <pre>.
Exemplo:
<!-- 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
É possível conectar-se ao processo de compilação para suportar recursos personalizados de template. No entanto, esteja ciente de que, ao injetar módulos personalizados de tempo de compilação, seus templates não funcionarão com outras ferramentas de build baseadas em módulos internos padrão, por exemplo vue-loader e vueify.
Um array de módulos do compilador. Para detalhes sobre módulos do compilador, consulte o tipo ModuleOptions nas declarações flow e nos módulos internos.
directives
Um objeto onde a chave é o nome da diretiva e o valor é uma função que transforma um nó da AST de template. Por exemplo:
compiler.compile('<div v-test></div>', {
directives: {
test (node, directiveMeta) {
// transform node based on directiveMeta
}
}
})
Por padrão, uma diretiva de tempo de compilação extrairá a diretiva e a diretiva não estará presente em tempo de execução. Se você quiser que a diretiva também seja tratada por uma definição de tempo de execução, retorne true na função de transformação.
Consulte a implementação de algumas diretivas de tempo de compilação integradas.
preserveWhitespace Obsoleto desde 2.6
booleantruePor padrão, a função de renderização compilada preserva todos os caracteres de espaço em branco entre as tags HTML. Se definido como false, os espaços em branco entre as tags serão ignorados. Isso pode resultar em um desempenho ligeiramente melhor, mas pode afetar o layout de elementos inline.
Semelhante a compiler.compile, mas retorna diretamente funções instanciadas:
{
render: Function,
staticRenderFns: Array<Function>
}
Isto só é útil em tempo de execução com builds pré-configurados, portanto não aceita quaisquer opções de tempo de compilação. Além disso, este método usa new Function(), pelo que não é compatível com CSP.
2.4.0+
O mesmo que compiler.compile, mas gera código de função de renderização específico para SSR, otimizando partes do template em concatenação de strings, de modo a melhorar o desempenho de SSR.
Isto é usado por predefinição em vue-loader@>=12 e pode ser desativado com a opção optimizeSSR.
2.4.0+
O mesmo que compiler.compileToFunction, mas gera código de função de renderização específico para SSR, otimizando partes do template em concatenação de strings, de modo a melhorar o desempenho de SSR.
Analisa um SFC (componente de ficheiro único, ou ficheiro *.vue) num descritor (consulte o tipo SFCDescriptor nas declarações flow). Isto é usado em ferramentas de build de SFC como vue-loader e vueify.
Gera uma moldura de código que realça a parte em template definida por start e end. Útil para o relato de erros em ferramentas de nível superior.
pad