
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
@rapiop/scriptjs
Advanced tools
$script.js is an asynchronous JavaScript loader and dependency manager with an astonishingly impressive lightweight footprint. Like many other script loaders, $script.js allows you to load script resources on-demand from any URL and not block other resources from loading (like CSS and images). Furthermore, it's unique interface allows developers to work easily with even the most complicated dependencies, which can often be the case for large, complex web applications.
old school - blocks CSS, Images, AND JS!
<script src="jquery.js"></script>
<script src="my-jquery-plugin.js"></script>
<script src="my-app-that-uses-plugin.js"></script>
middle school - loads as non-blocking, but has multiple dependents
$script('jquery.js', function () {
$script('my-jquery-plugin.js', function () {
$script('my-app-that-uses-plugin.js')
})
})
new school - loads as non-blocking, and ALL js files load asynchronously
// load jquery and plugin at the same time. name it 'bundle'
$script(['jquery.js', 'my-jquery-plugin.js'], 'bundle')
// load your usage
$script('my-app-that-uses-plugin.js')
/*--- in my-jquery-plugin.js ---*/
$script.ready('bundle', function() {
// jquery & plugin (this file) are both ready
// plugin code...
})
/*--- in my-app-that-uses-plugin.js ---*/
$script.ready('bundle', function() {
// use your plugin :)
})
$script('foo.js', function() {
// foo.js is ready
})
$script(['foo.js', 'bar.js'], function() {
// foo.js & bar.js is ready
})
$script(['foo.js', 'bar.js'], 'bundle')
$script.ready('bundle', function() {
// foo.js & bar.js is ready
})
// create an id and callback inline
$script(['foo.js', 'bar.js'], 'bundle', function () {
// foo.js & bar.js is ready
})
$script('foo.js', 'foo')
$script('bar.js', 'bar')
$script
.ready('foo', function() {
// foo.js is ready
})
.ready('bar', function() {
// bar.js is ready
})
var dependencyList = {
foo: 'foo.js'
, bar: 'bar.js'
, thunk: ['thunkor.js', 'thunky.js']
}
$script('foo.js', 'foo')
$script('bar.js', 'bar')
// wait for multiple depdendencies!
$script.ready(['foo', 'bar', 'thunk'], function () {
// foo.js & bar.js & thunkor.js & thunky.js is ready
}, function(depsNotFound) {
// foo.js & bar.js may have downloaded
// but ['thunk'] dependency was never found
// so lazy load it now
depsNotFound.forEach(function(dep) {
$script(dependencyList[dep], dep)
})
})
// in my-awesome-plugin.js
$script.ready('jquery', function() {
//define awesome jquery plugin here
$script.done('my-awesome-plugin')
})
// in index.html
$script('jquery.js', 'jquery')
$script('my-awesome-plugin.js')
$script.ready('my-awesome-plugin', function() {
//run code here when jquery and my awesome plugin are both ready
})
Optionally to make working with large projects easier, there is a path variable you can set to set as a base.
$script.path('/js/modules/')
$script(['dom', 'event'], function () {
// use dom & event
});
Note that this will include all scripts from here on out with the base path. If you wish to circumvent this for any single script, you can simply call $script.get()
$script.path('/js/modules/')
$script(['dom', 'event'], function () {
// use dom & event
})
$script.get('http://example.com/base.js', function () {
})
As of 2.5.5 it's possible to concat URL arguments (i.e. a query string) to the script path. This is especially useful when you're in need of a cachebuster and works as follows:
$script.urlArgs('key=value&foo=bar');
Please note that Squid, a popular proxy, doesn’t cache resources with a querystring. This hurts performance when multiple users behind a proxy cache request the same file – rather than using the cached version everybody would have to send a request to the origin server. So ideally, as Steve Souders points out, you should rev the filename itself.
Building a $script environment works like this:
npm install -dev
make
You can add $script to your existing ender build by adding it as such:
ender add scriptjs
Get access to it as such:
$.require(...)
You can also require it as such:
var $S = require('scriptjs')
$S('/foo.js', function () {
// foo is ready
})
FAQs
Asyncronous JavaScript loader and dependency manager
The npm package @rapiop/scriptjs receives a total of 1 weekly downloads. As such, @rapiop/scriptjs popularity was classified as not popular.
We found that @rapiop/scriptjs 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.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.