Tengo dos proyectos Vue 3: una biblioteca y un proyecto principal.
Biblioteca
Construyo este proyecto como biblioteca Vue 3
vue-cli-service build --target lib --name index src/index.common.ts En este proyecto uso js-joda :
"dependencies": { "@js-joda/core": "^5.2.0", ... } para eliminar node_modules de la biblioteca del paquete webpack, hago lo siguiente en la biblioteca vue.config.js :
const nodeExternals = require('webpack-node-externals'); ... configureWebpack: config => { config.target = 'node'; config.externalsPresets = { node: true }; config.externals = [nodeExternals()]; }, Proyecto principal
También uso js-joda en este proyecto y como mi biblioteca es local, tengo lo siguiente en package.json :
"dependencies": { "@js-joda/core": "^5.2.0", "my-lib": "file:./../../my-lib", ... } Problema
Cuando construyo main project , con la configuración que describí anteriormente, se incluyen dos versiones de la biblioteca js-joda en los paquetes JS. Una versión se toma de main-project/node_modules y otra de my-lib/nodes_modules . Como resultado, tengo diferentes instances de funciones con el mismo nombre, lo que me da resultados incorrectos en mi código.
Si my-lib/nodes_modules antes de construir main project entonces todo está bien. Sin embargo, hacerlo siempre antes de construir main project no es una buena solución. Además trabajo en dos proyectos simultáneamente.
¿Alguien podría decir cómo puedo ocultar my-lib/nodes_modules del main project de una mejor manera?
En su biblioteca, debe incluir js-joda en peerDependencies , mientras que en su proyecto principal debe incluir js-joda en dependencies .
Para más información - https://nodejs.org/es/blog/npm/peer-dependencies/