
Research
NPM targeted by malware campaign mimicking familiar library names
Socket uncovered npm malware campaign mimicking popular Node.js libraries and packages from other ecosystems; packages steal data and execute remote code.
root-require
Advanced tools
For use in tests only! require() using a relative path from the root directory of the present module
a more convenient require method for running TESTS ONLY.
WARNING:
THIS MODULE PROBABLY DOES NOT WORK IN THE WAY YOU EXPECT IT TO WORK ALL THE TIME. I REPEAT: IT HAS DIFFERENT BEHAVIOR BASED ON HOW IT'S BROUGHT IN AS A DEPENDENCY THAT WILL CAUSE YOU HEADACHES. ESPECIALLY IF YOU USE IT IN TWO MODULES WHICH DEPEND ON ONE ANOTHER. (this is because of the way npm optimizes dependencies, and this module doesn't address that, since it's for testing only.).
That said, as long as you use this module as a DEV DEPDENDENCY, everything should work as expected. Sorry for the capslock. ~Mike
This lets you require()
using a relative path from the root directory of the present module.
Keep in mind
require()
is synchronous. And this library is not any more efficient-- (it usesfs.*Sync
methods) Just like when you userequire()
, you should be fine as long as you're doing this at the top of your file outside of any function declarations.
Just once:
var Sails = require('root-require')('lib/app');
More than once:
var rootRequire = require('root-require');
var Sails = rootRequire('lib/app');
var Router = rootRequire('lib/router');
var MiddlewareLibrary = rootRequire('lib/middleware');
It's easier to reason about the structure of your module when the paths are consistent. The structure of your project becomes more declarative- dependencies are consistently referenced, irrespective of the user file's home in the directory structure.
require()
require(...)
function depends on where the user file (Bi) is located.require()
call in Bx to reflect the new relative path from Bx to Ax.e.g. Consider trying to change the path to giggle.js
in an automated way:
hard
// foo.js
var Giggle = require('./wiggle/sniggle/giggle');
// bar.js
var Giggle = require('../../../../../wiggle/sniggle/giggle');
// baz.js
var Giggle = require('../../../../wiggle/sniggle/giggle');
// 20 more files like this, 100 other files like `giggle.js`
easy
// foo.js
var Giggle = require('root-require')('lib/wiggle/sniggle/giggle');
// bar.js
var Giggle = require('root-require')('lib/wiggle/sniggle/giggle');
// baz.js
var Giggle = require('root-require')('lib/wiggle/sniggle/giggle');
// 20 more files like this, 100 other files like `giggle.js`
This module is literally a 3-line wrapper around the awesome packpath
module (https://github.com/jprichardson/node-packpath). I just made this for convenience/ so I could have it in one line because I always forget how path.join
works w/ Windows and all that.
MIT, c. 2014 Mike McNeil
FAQs
For use in tests only! require() using a relative path from the root directory of the present module
We found that root-require demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Socket uncovered npm malware campaign mimicking popular Node.js libraries and packages from other ecosystems; packages steal data and execute remote code.
Research
Socket's research uncovers three dangerous Go modules that contain obfuscated disk-wiping malware, threatening complete data loss.
Research
Socket uncovers malicious packages on PyPI using Gmail's SMTP protocol for command and control (C2) to exfiltrate data and execute commands.