Estoy agrupando una biblioteca JS usando Rollup. Esta biblioteca depende de @tensorflow/tfjs-core .
En el código de tfjs, hay una función que obtiene una URL. Si está en el entorno del navegador, utiliza la función de fetch global; si no es así, intenta importar node-fetch .
Algo entre estas líneas:
fetch(path: string, requestInits?: RequestInit): Promise<Response> { if (env().global.fetch != null) { return env().global.fetch(path, requestInits); } if (systemFetch == null) { systemFetch = require('node-fetch'); } return systemFetch(path, requestInits); } Mi biblioteca está hecha para ejecutarse en el navegador, por lo que siempre usa la función de fetch global. Sin embargo, Rollup aún incluye los requisitos de node-fetch en los activos de mi biblioteca.
No debería ser un problema, pero algunos consumidores informan errores cuando usan la biblioteca en un proyecto React que usa un paquete web:
No se pudo compilar.
./node_modules/[my lib]/index.js No se puede encontrar el módulo: 'node-fetch'. Asegúrese de que este paquete esté instalado.
Puede instalar este paquete ejecutando: npm install node-fetch.
La pregunta es: ¿hay alguna manera de decirle a Rollup que no incluye este paquete?
Pensé en reemplazar require('node-fetch') por undefined después de generar el paquete, pero se siente como un truco sucio. ¿Alguna otra sugerencia?
PD: Creo que marcar node-fetch como external en proyectos de consumo solucionaría el problema, pero dado que no uso node-fetch en mi lib, sería bueno eliminarlo de la salida final.
Otros administradores de paquetes pueden incluir o excluir archivos según el entorno, test , development , production , etc.
Hay varias formas de implementar esto, incluso llegando a
# Makefile ENVIRONMENT ?= test ROLLUP = $(which rollup) ENVSUBST = $(which envsubst) rollup.config.js: src/$(ENVIRONMENT) ${ENVSUBST} < $@ > $^ ${ROLLUP} $^ -o $(ENVIRONMENT).jsSi creó archivos con el nombre de sus entornos, podría compilarlos usando
make -e environment=browserNo espero que mi código funcione, solo para expresar ideas.