Importar atributos
Anteriormente
O V8 lançou o recurso import assertions na versão v9.1. Este recurso permitiu que declarações de importação de módulos incluíssem informações adicionais usando a palavra-chave assert
. Essas informações adicionais atualmente são usadas para importar módulos JSON e CSS dentro de módulos JavaScript.
Atributos de importação
Desde então, as afirmações de importação evoluíram para import attributes. O objetivo do recurso permanece o mesmo: permitir que declarações de importação de módulos incluam informações adicionais.
A diferença mais importante é que as afirmações de importação tinham semânticas apenas de afirmação, enquanto os atributos de importação têm semânticas mais relaxadas. Semânticas apenas de afirmação significam que as informações adicionais não afetam como um módulo é carregado, apenas se ele é carregado. Por exemplo, um módulo JSON é sempre carregado como módulo JSON por conta de seu tipo MIME, e a cláusula assert { type: 'json' }
só pode causar falha no carregamento se o tipo MIME do módulo solicitado não for application/json
.
No entanto, as semânticas apenas de afirmação tinham uma falha fatal. Na web, a forma das requisições HTTP difere dependendo do tipo de recurso solicitado. Por exemplo, o cabeçalho Accept
afeta o tipo MIME da resposta, e o cabeçalho de metadados Sec-Fetch-Dest
afeta se o servidor web aceita ou rejeita a requisição. Como uma afirmação de importação não podia afetar como carregar um módulo, ela não era capaz de alterar a forma da requisição HTTP. O tipo do recurso solicitado também afeta quais Políticas de Segurança de Conteúdo são usadas: as afirmações de importação não podiam trabalhar corretamente com o modelo de segurança da web.
Os atributos de importação relaxam as semânticas apenas de afirmação para permitir que os atributos afetem como um módulo é carregado. Em outras palavras, os atributos de importação podem gerar requisições HTTP que contenham os cabeçalhos Accept
e Sec-Fetch-Dest
apropriados. Para corresponder à sintaxe às novas semânticas, a antiga palavra-chave assert
foi atualizada para with
:
// main.mjs
//
// Nova sintaxe 'with'.
import json from './foo.json' with { type: 'json' };
console.log(json.answer); // 42
import()
dinâmico
De forma semelhante, a importação dinâmica import()
também foi atualizada para aceitar uma opção with
.
// main.mjs
//
// Nova opção 'with'.
const jsonModule = await import('./foo.json', {
with: { type: 'json' }
});
console.log(jsonModule.default.answer); // 42
Disponibilidade de with
Os atributos de importação estão habilitados por padrão no V8 v12.3.
Depreciação e eventual remoção de assert
A palavra-chave assert
foi depreciada a partir do V8 v12.3 e está planejada para ser removida na versão v12.6. Por favor, use with
em vez de assert
! O uso da cláusula assert
imprimirá um aviso no console incentivando o uso de with
.