Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

Sorry, you do not have permission to ask a question, You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please type your username.

Please type your E-Mail.

Please choose an appropriate title for the post.

Please choose the appropriate section so your post can be easily searched.

Please choose suitable Keywords Ex: post, video.

Browse

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Logo Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Logo

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Navigation

  • Home
  • About Us
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • About Us
  • Contact Us
Home/ Questions/Q 5310

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Latest Questions

Author
  • 61k
Author
Asked: November 27, 20242024-11-27T08:04:08+00:00 2024-11-27T08:04:08+00:00

¿Dónde debe ir mi dependencia?

  • 61k

Dependencies o devDependencies

El ecosistema de Javascript esta lleno de dependencias, hay mas de las que nos gustaría pero bueno así es el mundo.

Una pregunta constante que me hacen es: ¿Estos deberían ir mis dependencias? ¿dependencies o devDependencies?

Si bien existen otras categorías como peerDependencies, optionalDependencies, bundleDependencies, etc (más información). Su uso no es tan común como el de las que mencionaron.

En lo personal yo tengo un criterio que es el siguiente:

Y esto en que afecta a ultra lord

En dependencies van los paquetes que mi proyecto necesita para ejecutarse, en devDependencies van los paquetes que mi proyecto necesita para tooling (construcción, lints, test, etc).

Este es el core de mi razonamiento … pero hay situaciones o mas bien contexto donde esto necesita ciertos matices y el contexto de lo que se esta construyendo y el entorno donde se va a ejecutar.

Por ejemplo supongamos que instalamos un paquete llamado eslint, ¿sería una dependency o devDependency?

En una biblioteca UI: devDependency
En un plugin de eslint: dependency (aunque también sería una peerDependency)
En una aplicación: devDependency

Eslint no es necesario para que mi aplicación y/o biblioteca se ejecute salvo la excepción de estes haciendo un plugin que haga uso de eslint para ejecutarse.

La importancia de categorizar las dependencias tiene un proposito bastante crucial cuando distribuyes software porque puede permitirte omitir la instalación de ciertos paquetes lo cual hace que el deploymente sea más rápido, en el sentido de que no tienes que instalar mas cosas de lo necesario.

Salvemos al planeta un paquete a la vez 😀

Oso abrazando árbol

Otro ejemplo, Typescript.

En una biblioteca UI: devDependency
En una biblioteca de tipos: devDependency
En una aplicación: devDependency

¿Porqué siempre es una devDependency? Simple, es un compiler, lo necesitas para construir tu software, pero al momento de la distribución no se necesita.

Probablemente si has usado create-react-app con typescript habrás notado que typescript es una dependency, entonces, ¿te acabo de engañar?

Cayó en el genjutsu

No, en el caso de aplicaciones web donde se generaran bundles con las dependencias que se usan y no está hecho para ser distribuido como paquete, la distinción que te mencioné puede que no tenga sentido, al final depende del target donde tu proyecto se ejecute.

Si estuvieramos haciendo un servidor y no usaramos herramientas como babel, ts o cualquier otra herramienta de construcción, unicamente node, al momento de hacer un deploy podría instalar solo las dependencias de producción que necesita mi servidor para poder funcionar y eso haría que todo fuera mucho más rápido, aunque este contexto quizás podría no ser del todo cierto si estas en un monorepo y estas dentro de un workspace.

¿Entonces porque preocuparme esto? ¿Si todo da igual porque leí esto?

Hay varios motivos que no conozco pero si te puedo dar 2 muy concretos, seguridad e identificación para eliminar.

En el punto de seguridad es simple, es preferible tener vulnerabilidades en devDependencies que en una dependency.

Obvio es preferible no tenerla pero el hecho de remover una dependency puede llevarte a modificar código y una vulnerabilidad puede ser explotada ya que esta al alcance del usuario. En una devDependency puede tener vulnerabilidades pero si solo se usan en un scope de construcción y no en lo que llegará el usuario podemos resolverlo sin tanta presión.

NOTA: depende del grado de la vulnerabilidad y el potencial de ser explotada

En el punto de identificación paquetes para eliminar es que hay dependencias que solo utilizamos bajo ciertos contextos, por ejemplo yo uso y recomiendo semantic-release. Cada vez que alguien descarga el proyecto descargan semantic-release, esto no se debe utilizar en local pero al ser una devDependency se tiene que instalar.

Como ya identifique que esto solo se usa en un contexto de un sistema de CI/CD, podría idear muchas estrategias para evitar su instalación, en este caso yo uso github actions así que fácilmente podría remover esas devDependencies y sustituirlas por un action.

Nota: A veces no podemos llegar a estas conclusiones antes de instalar por desconocimiento de la herramienta como es mi caso

Espero les haya gustado, no se les olvide seguirme en twitter o github 😀

javascriptprogrammingwebdev
  • 0 0 Answers
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

Sidebar

Ask A Question

Stats

  • Questions 4k
  • Answers 0
  • Best Answers 0
  • Users 2k
  • Popular
  • Answers
  • Author

    ES6 - A beginners guide - Template Literals

    • 0 Answers
  • Author

    Understanding Higher Order Functions in JavaScript.

    • 0 Answers
  • Author

    Build a custom video chat app with Daily and Vue.js

    • 0 Answers

Top Members

Samantha Carter

Samantha Carter

  • 0 Questions
  • 20 Points
Begginer
Ella Lewis

Ella Lewis

  • 0 Questions
  • 20 Points
Begginer
Isaac Anderson

Isaac Anderson

  • 0 Questions
  • 20 Points
Begginer

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help

Footer

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise

Querify Question Shop: Explore, ask, and connect. Join our vibrant Q&A community today!

About Us

  • About Us
  • Contact Us
  • All Users

Legal Stuff

  • Terms of Use
  • Privacy Policy
  • Cookie Policy

Help

  • Knowledge Base
  • Support

Follow

© 2022 Querify Question. All Rights Reserved

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.