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

blessify

v1.4.2

Published

browserify transform for require('something.less')

Downloads

4

Readme

blessify

browserify transform for require('something.less')

This came from being inspired but at the same time disappointed with lessify/node-lessify; it works well, but has some use cases where i needed to change it so i decided to create one that fits my needs. The goal is to be able to require less files from whatever browserify module. Let's take this example

- app  
  - modules
    - some-module
      - index.html
      - index.js  
      - style.less  
  - index.html  
  - index.js
  - global.less
- node_modules
- package.json

The Problem:

Your application will bundle with one or more modules and will include global.less either through a require in index.js or an @import in style.less.
You also want to be able to run every module in isolation so each module will also have to include global.less for compilation.
Lessify inserts style tags to the head of the HTML document but global.less gets included multiple times when you compile app/index.js which bloats the js bundle. This also leads for if you @import global.less from other less files, it won't be watched when you run watchify.

The Solution

I wrote this browserify transform that is extended with some exported properties:

  • blessify.render: method that returns a promise fulfilled with the less output
  • blessify.input: CSS files parsed from require('something.less') {src: path, input: css-text}
  • blessify.imports: import paths for less rendering
  • blessify.requires: non-distinct array of css files required from javascript
  • blessify.jsFiles: parsed javascript files

The transform parses all the less files in a consistent way, and buffers them until the JS compilation is successful. I expose a render method that will render the less with no such caveats and returns a promise with the result of the compilation.

Usage

$ npm install blessify
var browserify = require('browserify')
  , blessify = require('blessify');

var wStream = fs.createWriteStream('path/to/bundle.js');
var b = browserify();
b.transform(blessify, options);
b.add('path/to/index.js');
b.bundle().pipe(wStream);

wStream.on('close', function(){
  blessify.render()
    .then(function(output){
       //write output.css to a bundle.css
       fs.writeFile('path/to/bundle.css', 'utf8', function(err){
          console.log('compilation successfull');
       });
    });
    
  //correct gathering for watching files:
  // required less files
  for(var i = 0, l = blessify.input.length; i < l; i++){
    addWatcher( blessify.input[i].src );
  }
  // css imports
  for(var i = 0, l = blessify.imports.length; i < l; i++){
    addWatcher( blessify.imports[i] );
  }
  //js files
  for(var i = 0, l = blessify.jsFiles.length; i < l; i++){
    addWatcher( blessify.jsFiles[i] );
  }
});