npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

libraries

v0.0.3

Published

Libraries loader for Broccoli or similar library loaders or importers

Downloads

1,693

Readme

Libraries

Libraries loader for Broccoli to make it easier and more efficient. We should avoid re-packaging every javascript library as a simple Ember CLI addon wrapper!!

Status

It works :)

You are encouraged to extend the API as you see fit and integrate more of the API as CLI commands to improve the user experience!

Why?

This project was created in response to ember-cli #2177. It aims to make it easier and more flexible to configure libraries to be imported by Broccoli.

Select libraries

selected is a simple text file, where each line is a library you wish to include :)

bootstrap
datepicker
...

or use the library CLI to add/remove selected libs:

Add library add foundation

Remove library rm bootstrap

Configuration

Libraries can be grouped by category (bower, vendor, libs etc.). You can configure a simple directory alias mechanism if you like in the config section config.

config.json contains configurations for all the simple (or custom) libraries

// config.json
{
  config: {
    'vendor': 'vendor/libs'
  },
  containers: {
    bower: {
      "components": [
        "bootstrap", 
        ...
      ],
      "libs: {    
        "datepicker": {"date": "dist/datepicker.js"}, 
        "calendar": "calendar.js",
        ...
      }    
    },
    vendor: {
      "components": [
        "bootstrap", 
        ...],
      "libs: {
        ...
      }
    }
  }
}

The libs entry is for simple libraries that are a single javascript file. Anything library with more than one file is a "component" and should have its own component configuration.

Component configuration:

// bootstrap.json
{
    "dir": "dist",
    "scripts": {
        "dir": "js",
        "files": ["bootstrap.js"]
        "main":  {"bootstrap/core": "bootstrap.js"} // can be used to remap
    },
    "styles": {
        "dir": "css",
        "files": ["x.css"]
    },
    "fonts": {
        "dir": "fonts",
        "files": ["xyz.eof", "xyz.svg"]
    }
}

The dir entries are optional (but useful). The component structure will make it easy to do all kinds of interesting things in the future... (see Notes + Design documents for some ideas floating around in mind space...)

Registry

The global registry will contain an index.js file and a list of library config files.

Note: Currently it is a json file (for extensibility). It could perhaps be a simple line-divided text file like the selected file if no other info is needed...

// index.json
{
  registry: [
    'bootstrap'
  ]
  ...
}

Registry files:

index.json
bootstrap.json
...

On library install, the libraries you have selected which don't have a local library config in your local repo will be downloaded from the global registry.

Then you just have can run library build to build the imports.js file which libraries will use to apply on your app to do the magic imports! Awesome 8>)

function() {
  module.exports = function(app) {
    app.import('dist/js/bootstrap.js');
    app.import('dist/css/bootstrap.css');    
  }
}();

When you build, it will build anxlibs/builds/imports-dev.js if your current environment is dev and so on... This way you can better manage which libraries have been tested to go into production without overwriting them when in dev or test mode. Super bonus!

Note: In future versions we might split up all configuration according to environment so you can opt-in to manage libraries per environment.

Petal integration for ES6 goodness

We also aim to integrate it nicely with petal and broccoli petal, in order that we can easily export (almost) any javascript library as an ES6 module for Ember CLI consumption :)

Petal test example:

var source = fs.readFileSync('bower_components/moment/moment.js');
var m = new Petal('bower_components/moment/moment.js', source);

// moment.js exposed as 'moment' module as default
assert.deepEqual(m.exports, {
  'moment': ['default']
});

Petal will read the source file and convert it to en ES6 module to be saved on top of original (in this example).

new Petal(destination, source)

The ember-cli petal integration will likely support something an API like this:

app.import('bower_components/famous/core', { remap: 'famous/core'' };`

which would somehow output all of this (/8>?

https://github.com/abuiles/famous-remap/tree/master/famous-remapped

According to comments in #2177

Ember config

The ember-config generator will soon be refactored to instead export library/component config files instead of directly injecting app.import statements into the Brocfile.js. This will let you simply select the libraries you like via the generator and then install, build and import all the import goodness directly into the Brocfile.js >>> pure MAGIC!!

Usage example

Here simulating the app object and doing console.log of the commands that the app object would normally execute on app.import

Brocfile example

var EmberApp = require('ember-cli/lib/broccoli/ember-app');

var app = new EmberApp();

require('libraries').applyOn(app);

module.exports = app.toTree();

CLI support

Deprecated See bin/library for more recent CLI API

  • Add CLI interface to add/remove via CLI commands

Add a library to selection

library add bootstrap

Remove a library from selection

library rm bootstrap

Install all library configs selected that are not part of local library configuration repo Missing configurations are fetched from remote repo/repository and installed locally!

library install

Runs install to install any selected components without a config. Build javascript imports from selected libraries, using local library configuration. Save as javascript file, ready to be used via require('libraries').applyOn(app); in Brocfile.js

library build

Please help out to make this an awesome experience and greatly enhance productivity for all of us... ;)

Enjoy :)

Customization

The library API is very customizable. See the code for yourself!

The build calls can each take a callback which allows you to fine-tune the output of any build, so as to not be hardcoded to be used for the Broccoli build process ;)

License

MIT