Compactación de node_modules para la implementación del lado del cliente

Estoy implementando una aplicación del lado del cliente en JavaScript usando Node.js. Debido a que implementaré el software en muchas máquinas, me gustaría minimizar el tamaño del paquete que distribuyo. En particular, me gustaría eliminar cualquier archivo innecesario de node_modules.

Para empezar, esto significa deducir y podar el árbol de dependencias, lo que npm puede hacer por mí. Pero también me gustaría eliminar todos los archivos package.json y (especialmente) cualquier otro archivo que no sea necesario para la implementación. En muchos de los paquetes que estoy usando hay toneladas de pruebas, múltiples versiones de archivos (minified, browserified, etc.) y similares. Solo necesito los archivos JavaScript que realmente utiliza la aplicación en ejecución. De lo contrario, estaré distribuyendo unos pocos 100 Kb de archivos que no se utilizan realmente.

Sé de node-browserify pero mi aplicación se ejecutará en un entorno CommonJS, no en un navegador, por lo que me gustaría mantener los módulos separados y cargarlos según sea require .

Estoy pensando en escribir un complemento de Grunt que recorra el árbol de dependencias usando los archivos JavaScript necesarios en tiempo de ejecución y los escriba en una estructura de árbol para que puedan cargarse utilizando require (solo cargue los módulos directamente sin necesidad de un package.json ). Pero me gustaría asegurarme de que nadie haya hecho esto por mí antes de abordarlo.

no se encuentra grun-package-minifier (Esta no es una respuesta real. Quería comentar en la respuesta anterior, pero aún no tengo suficiente reputación :().

npm install grunt-package-minifier –save-dev Contraseña: npm WARN package.json [email protected] Sin campo de repository. npm WARN package.json [email protected] No README data npm ERR! 404 404 No encontrado: grunt-package-minifier npm ERR! 404 npm ERR! 404 ‘grunt-package-minifier’ no está en el registro de npm.

FWIW: grunt-package-minifier . Mi caso de uso es un poco inusual ya que estamos desarrollando un marco de extensión para varios navegadores . Al igual que Browserify y, a diferencia de las implementaciones estándar de NodeJS, queremos minimizar el tamaño de nuestra distribución, incluidos los módulos CommonJS. Pero a diferencia de Browserify , admitimos CommonJS, por lo que podemos mantener la estructura del módulo en lugar de concatenar todo en un archivo grande.

Esencialmente, elimino todos los archivos package.json , README, de prueba, etc. de los node_modules pero mantengo los archivos JavaScript esenciales en una estructura que puede ser utilizada por un cargador de módulos CommonJS.