Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compacting node_modules for client-side deployment

I'm implementing a client-side application in JavaScript using Node.js. Because I will be deploying the software on many machines, I would like to minimize the size of the package I distribute. In particular, I would like to remove any unnecessary files from node_modules.

For starters this means deduping and pruning the dependency tree, which npm can do for me. But I'd also like to remove all the package.json files and (especially) any other files that are not needed for deployment. In many of the packages I am using there are tons of tests, multiple versions of files (minified, browserified, etc.) and the like. I just need the JavaScript files that are actually used by the running app. Otherwise I'll be distributing a few 100Kb of files that aren't actually used.

I know about node-browserify but my app will be running in a CommonJS environment, not a browser, so I'd like to keep the modules separate and load them with require.

I'm thinking about writing a Grunt plugin that walks the dependency tree using required, pulls out the JavaScript files needed at runtime and writes them to a tree structure so they can be loaded using require (just loading the modules directly without needing a package.json). But I'd like to make sure no one has done this for me before I tackle it.

like image 577
Matthew Gertner Avatar asked Jun 21 '13 15:06

Matthew Gertner


2 Answers

grun-package-minifier is not found ( This is not an actual answer. I wanted to commet in above answer but I do not have sufficient reputation yet :( ).

npm install grunt-package-minifier --save-dev Password: npm WARN package.json [email protected] No repository field. npm WARN package.json [email protected] No README data npm ERR! 404 404 Not Found: grunt-package-minifier npm ERR! 404 npm ERR! 404 'grunt-package-minifier' is not in the npm registry.

like image 57
curious_guy Avatar answered Oct 01 '22 16:10

curious_guy


FWIW: grunt-package-minifier. My use case is a bit unusual since we are developing a cross-browser extension framework. Like Browserify and unlike standard NodeJS deployments we want to minimize the size of our distribution, including any CommonJS modules. But unlike Browserify we support CommonJS so we can keep the module structure rather than concatenating everything into one big file.

Essentially I strip all the package.json, README, test files, etc. from node_modules but keep the essential JavaScript files in a structure that can be used by a CommonJS module loader.

like image 44
Matthew Gertner Avatar answered Oct 01 '22 16:10

Matthew Gertner