add caching features and npmignore