Devo dar atribuição para dependências de dev transitivas?
Estou trabalhando em uma biblioteca / ferramenta CLI para agrupar licenças de dependência em um único arquivo. Atualmente, estou tentando licenças coleta de: dependências diretas, transitivos-dependências e diretos dev -dependencies .
Em outras palavras, estou tentando coletar licenças de pacotes, que estão instalados em node_modules. As dependências dev transitivas não são instaladas pelo gerenciador de pacotes, devido à própria natureza das dependências dev.
Estou preocupado se partes do código dessas dependências transitivas podem ou não ser incluídas nos pacotes instalados.
Por exemplo: Projeto "A" depende do Pacote "B". O pacote "B" tem o Transpiler "C" como uma dependência de desenvolvimento. O código gerado pelo Transpiler "C" no Pacote "B" inclui não apenas o resultado da transpilação simples, mas também algum polyfill para uma função, que não está disponível em navegadores mais antigos, do Transpiler "C". Mas, como o Transpiler "C" é uma dependência dev transitiva, ele não é instalado em node_modules do Projeto "A", portanto, sem instalá-lo manualmente, a licença do Transpiler "C" -s não pode ser obtida corretamente, pode? Mesmo se pudéssemos, teremos que procurar as dependências / dev-dependências do Transpiler "C" -s também, etc, etc.
Nesse caso hipotético, temos apenas uma dependência transitiva de dev, mas, em cenários do mundo real, pode haver centenas. Pode haver várias versões do mesmo pacote definido como uma dependência dev transitiva em pacotes diferentes. Instalando manualmente as dependências de dev transitivas para coletar informações de licença, essas dependências de dev transitivas podem ter suas próprias dependências de dev, que também precisarão ser instaladas. Este processo terá que ser repetido até que todas as dependências de dev transitivas de todas as dependências de dev transitivas sejam instaladas.
A pergunta é: Devo me preocupar em coletar informações de licença sobre dependências de dispositivos transitivas? E se eu deveria, até que ponto?
Eu já me importo com dependências transitivas regulares, mas estou preocupado com dependências transitivas de dev.
Respostas
Este é um cenário realmente complicado, e é por isso que as ferramentas automatizadas de conformidade de licença não podem ir tão longe. Sua análise parece geralmente correta.
Na prática, eu esperaria que a licença de B não cobrisse apenas o código-fonte original de B, mas também o código transpilado de B (pelo menos se B for distribuído na forma transpilada). Isso contornaria perfeitamente o problema das dependências transitivas do desenvolvedor. No entanto, isso aponta para um problema mais geral: os metadados da licença podem não ser precisos, outra razão pela qual as ferramentas automatizadas só vão até certo ponto.
Se você estiver projetando uma ferramenta de uso geral, pode ser útil adicionar uma opção que também acione a análise de dependências de desenvolvimento e dependências transitivas de desenvolvimento, buscando metadados para as ferramentas mencionadas nos metadados do pacote (não há necessidade de instalá-los de fato). Por padrão, eu não esperaria que as dependências de desenvolvimento tivessem qualquer efeito direto no status de licenciamento (embora, como você explica corretamente, especialmente os polyfills podem violar essa expectativa).