During the course of developing the application, we discover that we need to
tweak the schemas we've defined. This is usually easy:

npm link mongoose-schemas-users

We've made some edits, and run the application:

Error: Cannot find module 'mongoose'

WTF?!? This issue arises because mongoose is a peer dependency. Now that
it has been npm link'd to a directory that resides outside of the application
itself, Node's typical resolution algorithm fails to find it.

This is where parent-require comes into play. It provides a fallback to
require modules from the loading (aka parent) module. Because the loading
module exists within the application itself, Node's resolution algorithm will
correctly find our peer dependency.

try{

var mongoose =require('mongoose');

}catch(_){

// workaround when `npm link`'ed for development

var prequire =require('parent-require')

, mongoose = prequire('mongoose');

}

var UserSchema =newmongoose.Schema(...);

module.exports = UserSchema;

With the fallback in place, we can both npm install and npm link this
plugin, correctly resolving peer dependencies in both cases.