tag atributo save package npm

atributo - ¿Cuál es la diferencia entre--save y--save-dev?



atributo alt y title (10)

Cuál es la diferencia entre:

npm install [package_name] --save

y

npm install [package_name] --save-dev

¿Qué significa esto?


De forma predeterminada, NPM simplemente instala un paquete en node_modules. Cuando intente instalar dependencias para su aplicación / módulo, primero deberá instalarlas y luego agregarlas a la sección de dependencies de su package.json .

--save-dev agrega el paquete de terceros a las dependencias de desarrollo del paquete. No se instalará cuando alguien instale su paquete. Por lo general, solo se instala si alguien clona el repositorio de origen y ejecuta npm install en él.

--save agrega el paquete de terceros a las dependencias del paquete. Se instalará junto con el paquete cada vez que alguien ejecute el npm install package .

Las dependencias de desarrollo son aquellas dependencias que solo se necesitan para desarrollar el paquete. Esto puede incluir corredores de prueba, compiladores, empaquetadores, etc. Ambos tipos de dependencias se almacenan en el archivo package.json del package.json . --save agrega a las dependencies , --save-dev agrega a devDependencies

https://docs.npmjs.com/cli/install documentación de https://docs.npmjs.com/cli/install se puede consultar aquí.


Es posible que la diferencia entre --save y --save-dev no se --save-dev inmediatamente si los ha probado en sus propios proyectos. Así que aquí hay algunos ejemplos ...

Digamos que estabas comprando una aplicación que usaba el paquete del moment para analizar y mostrar las fechas. Su aplicación es un programador, por lo que realmente necesita este paquete para ejecutarse, ya que en: no se puede ejecutar sin él . En este caso utilizarías

npm install moment --save

Esto crearía un nuevo valor en su package.json

"dependencies": { ... "moment": "^2.17.1" }

Cuando se está desarrollando, realmente ayuda usar herramientas tales como suites de prueba y es posible que necesite jasmine-core y karma . En este caso utilizarías

npm install jasmine-core --save-dev npm install karma --save-dev

Esto también crearía un nuevo valor en su package.json

"devDependencies": { ... "jasmine-core": "^2.5.2", "karma": "^1.4.1", }

No necesita la suite de prueba para ejecutar la aplicación en su estado normal, por lo que es una --save-dev tipo --save-dev , nada más. Puedes ver cómo si no entiendes lo que realmente está sucediendo, es un poco difícil de imaginar.

Tomado directamente de NPM docs docs#dependencies

Dependencias

Las dependencias se especifican en un objeto simple que asigna un nombre de paquete a un rango de versión. El rango de versión es una cadena que tiene uno o más descriptores separados por espacios. Las dependencias también se pueden identificar con un tarball o una URL de git.

Por favor, no ponga arneses de prueba o transpilers en su objeto de dependencias. Vea devDependencies , a continuación.

Incluso en los documentos, le pide que use --save-dev para módulos como los arneses de prueba.

Espero que esto ayude y sea claro.


Por lo general, no desea inflar el paquete de producción con cosas que solo pretende utilizar para fines de desarrollo. Por lo tanto, use la opción --save-dev (o -D) para separar esos paquetes como observadores (nodemon), marcos de prueba de unidad (jest, jasmine, mocha, chai, etc., etc.)

Cualquier otro paquete de biblioteca que sea necesario para que su aplicación funcione debe instalarse usando --save (o -S)

npm install --save lodash //prod dependency npm install -S moment // " " npm install -S opentracing // " " npm install -D jest //dev only dependency npm install --save-dev typescript //dev only dependency

Si abre el archivo package.json, verá estas entradas enumeradas en dos secciones diferentes:

"dependencies": { "lodash": "4.x", "moment": "2.x", "opentracing": "^0.14.1" }, "devDependencies": { "jest": "22.x", "typescript": "^2.8.3" },


Quiero añadir algunas de mis ideas como

Creo que aparecerán todas las personas diferentes cuando alguien use sus códigos en lugar de hacerlo usted mismo

Por ejemplo, escribe una biblioteca HTTP llamada node''s request

En tu biblioteca,

usaste lodash para manejar cadenas y objetos, sin lodash, tus códigos no pueden ejecutarse

Si alguien usa tu biblioteca HTTP como parte de sus códigos. Tus códigos serán compilados con los suyos.

tus códigos necesitan logotipos, entonces necesitas poner dependencies para compilar

Si escribes un proyecto como monaco-editor , que es un editor web,

ha agrupado todos sus códigos y la product env library su product env library utilizando webpack, cuando se complete la compilación, solo tenga un monaco-min.js

Entonces, alguien no sabe si --save o --save-dependencies , solo que él necesita es monaco-min.js

Resumen:

  1. Si alguien desea compilar sus códigos (usar como biblioteca), coloque en sus dependencies lodash que usaron sus códigos.

  2. Si alguien quiere agregar más funciones a sus códigos, necesita una unit test y un compiler , dev-dependencies


Según lo sugerido por @ andreas-hultgren en esta respuesta y de acuerdo con los documentos de npm :

Si alguien está planeando descargar y usar su módulo en su programa, entonces probablemente no quieran o necesiten descargar y crear la prueba externa o el marco de documentación que utiliza.

Sin embargo, para el desarrollo de aplicaciones web, Yeoman (una herramienta de andamiaje que instala un archivo package.json pre-escrito y revisado por pares, entre otros) coloca todos los paquetes en Dependencias de Dependencias y nada en las dependencias, por lo que parece que el uso de --save-dev es una apuesta segura en el desarrollo de aplicaciones web , al menos.


Un ejemplo perfecto de esto es:

$ npm install typescript --save-dev

En este caso, desearía tener disponible para su desarrollo Typescript (un lenguaje de codificación analizable de javascript), pero una vez que se implementa la aplicación, ya no es necesario, ya que todo el código se ha transpilado a javascript. Como tal, no tendría sentido incluirlo en la aplicación publicada. De hecho, solo ocuparía espacio y aumentaría los tiempos de descarga.


Ya se han proporcionado respuestas claras. Pero vale la pena mencionar cómo devDependencies afecta a la instalación de paquetes:

De forma predeterminada, npm install instalará todos los módulos listados como dependencias en package.json. Con el indicador --production (o cuando la variable de entorno NODE_ENV está configurada en producción), npm no instalará los módulos listados en devDependencies.

Consulte: https://docs.npmjs.com/cli/install


--save-dev guarda la especificación de semver en la matriz "devDependencies" en su archivo descriptor del paquete, --save guarda en "dependencias" en su lugar.


--save-dev se usa para los módulos utilizados en el desarrollo de la aplicación, no requiere mientras se ejecuta en el entorno de producción - se usa para agregarlo en package.json y se requiere para ejecutar la aplicación.

Ejemplo: express, body-parser, lodash, helmet, mysql, todo esto se usa mientras se ejecuta el uso de la aplicación --save para poner dependencias mientras que mocha, istanbul, chai, sonarqube-scanner se usan durante el desarrollo, así que ponga esos en dev -dependencias.

npm link o npm install también instalarán los módulos de dependencia de desarrollo junto con los módulos de dependencia en su carpeta de proyecto


  • --save-dev se usa para guardar el paquete para propósitos de desarrollo. Ejemplo: pruebas unitarias, minificación ..
  • --save se usa para guardar el paquete requerido para que la aplicación se ejecute.