npm package.json

npm - ¿Cómo se usan las propiedades ''archivos'' y ''directorios'' en package.json?



(1)

Si un package.json tiene un files prop, y / o un directories prop:

"files": [ "./src/assets/fonts/" ], "directories": { "assets:": "./src/assets" }

¿Cuáles son algunas formas de hacer uso de ellos? La documentación no menciona lo que se puede hacer con ellos una vez que se han especificado.

Por ejemplo, los documentos docs dicen:

El campo "archivos" es una matriz de archivos para incluir en su proyecto. Si nombra una carpeta en la matriz, también incluirá los archivos dentro de esa carpeta.

¿Qué significa "incluir en su proyecto"? Incluir dónde? ¿Cómo son accesibles ahora que no lo eran antes?

En la sección de directorios , los documentos dicen:

En el futuro, esta información puede usarse de otras formas creativas.

¿Cuáles son las formas creativas existentes en que se está utilizando?


"incluir en su proyecto" significa que los archivos estarán en el paquete tar que se crea cuando ejecuta npm publish . También puede ejecutar el npm pack para generar el tarball para inspección sin realmente activar una publicación. De esta manera, puede abrir el tarball generado e inspeccionar qué archivos se incluyeron o no.

Mientras que .npmignore (o .gitignore como proxy, si no .npmignore ) funciona como una lista negra de archivos para ignorar (por lo tanto, incluye todo lo demás de forma predeterminada), la matriz de files es una lista blanca. Es decir, en lugar de incluir todo de manera predeterminada, si se especifica la matriz de files todo se excluye de manera predeterminada y solo los archivos enumerados explícitamente se incluirán en el paquete tar.

Como ejemplo, supongamos que su paquete es una biblioteca destinada al consumo en el navegador. Su código está en lib/ , y ejecuta browserify para compilar en una lib compatible con el navegador en dist/index.js . Comienza con un montón de archivos listados en .gitignore , que se usa como el defacto .npmignore que no existe. Pero ahora que dist/ está lleno de archivos generados, desea que se ignoren del repositorio de git. Si los agrega a .gitignore , se excluirán del repositorio de git, pero también se ignorarán del paquete tarball . Entonces tiene dos opciones: duplicar su .gitignore como .npmignore pero solo enumere dist/ in .gitignore . Si hace esto, tendrá que mantener dos archivos casi sincronizados. De esta manera es tedio y propenso a errores.

La otra alternativa es no tener un .npmignore , y simplemente enumerar los archivos que realmente desea en el paquete, en la matriz de files . README.* , package.json , CHANGELOG.* ( CHANGELOG.* vez un par de otros) se incluyen automáticamente en el tarball independientemente. Entonces simplemente agrega "files": [ "dist" ] y listo. Ahora su paquete tarball no incluirá la fuente original JS de lib , ni tests/ etc, sino que solo contendrá la lib compilada real en dist/ .

En cuanto a los directories , normalmente enumero las fuentes lib (para es5), src (para es6, coffeescript, mecanografiado, etc.), dist (para compilaciones específicas de navegador o vm), test , output (para archivos generados temporalmente como informes de cobertura, etc. ), doc , etc. Aunque esta propiedad no es utilizada directamente por npm u otras herramientas, hace explícita la estructura del directorio. Además, hace que los directorios sean referenciables en scripts npm de la siguiente manera:

"scripts": { "clean": "rm -rf $npm_package_directories_dist $npm_package_directories_output", "lint": "eslint $npm_package_directories_src", "test": "teenytest $npm_package_directories_test", }

De esta manera, los directorios se especifican solo una vez, y si cambian, solo necesitan cambiarse en una única ubicación (en lugar de muchas en todo el paquete.json).