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

node-stylus-require

v1.1.0

Published

A stylus requiring tool for isomorphic applications, typically use react-engine&express as the backend and react as the front end.

Downloads

10

Readme

node-stylus-require

npm version Build Status

Synopsis

This is a stylus requiring tool for isomorphic applications based on react and node. Typically use express with react-engine for the backend and react with webpack for the frontend to create an awesome application. But this is also not limited to isomorphic application, you can use it as a SPA in the broswer environment based on webpack, that is without the backend. Or just use it in node environment to load stylus files.

Installation

The installation is pretty simple. Use npm install node-stylus-require to your project, with suggestion of adding it as one of your dependencies.

npm install --save node-stylus-require

What is isomorphic and why

Isomorphic applications are the awesome ones that the backend and the frontend use mostly the same code, which is usually JavaScript. And the frontend part usually is based on Single Page Architect. Isomorphic applications are fast and get a better user experience.

The reasons why they are fast are that they use backend rendering with NodeJS and service data so that the first screen is fast enough. After the browser has got the first page, SPA on the frontend just load the basic resource and data to show other things such as new components or just another new page, the result is that user's actions will respond as fast as possible. This may be the future of JavaScript, providing us a way to build faster and better user experience net applications!

The result is people like your awesome application. Here, node-stylus-require is a tool for you to manager styles files of an typical isomorphic applications but not limited to it. Let's get start to learn how to use it to help.

Usage

The node-stylus-require provides 4 levels of usage to require stylus file into your applications. You may not limited to these levels, for it provides flexibility to support usage under other situations.

Attension: You need to run npm install under the root of node-stylus-require so that all the examples can be runned and tested.

Level 1 NodeJS

This is a simple usage, with this you can require stylus file directly into your applications.

// Register .styl as the stylus files extensions
require('node-stylus-require').register({extensions: '.styl'})
// simple.styl is the stylus file under the same folder
var simpleCSS = require('./simple.styl')

console.log('This output css is %s !', JSON.stringify(simpleCSS));

The {extensions: '.styl'} is optional, and the .styl is the default value. The return format is {id: {MD5}, css: {CSS String}}.

The complete example is here. Run npm start to check the output.

Level 2 Backend Rendering

This is a pure backend applications based on express. With the help of react-engine and express, we will create an site based on express.

The first step is still register .styl files to nodejs.

var nodeStylusRequire = require('node-stylus-require')
nodeStylusRequire.register()

The next step is to add an interceptor to express. The interceptor is an important part to render a format correct html page.

var app = express()
...
app.use(nodeStylusRequire.styleInterceptor)

In your jsx, you can require .styl files and require the Style react component.

var SampleCSS = require('./Sample.styl')
var Style = require('node-stylus-require/Style.jsx')

Finally, add them to your page use React render function.

render() {
    return (
      <html ref="html" lang="en">
        <head>
            <title>Document</title>
        </head>
        <body>
          <Style style={SampleCSS}></Style>
          {/*Repeated resources will be handled*/}
          <Style style={SampleCSS}></Style>
          <div>
            <div className="Sample">
                Hello, World!
            </div>
          </div>
        </body>
      </html>
    );
}

The complete code is here! Run npm start in your shell to check it out.

Level 3 SPA

This time we are going to create a Single-Page Application with the help of webpack. As it is a frontend SPA, you may find the first screen is a bit slow with white screen flashing at the beginning.

Firstly, add webpack loader for stylus files.

test: /\.styl$/, loader: 'node-stylus-require/node-stylus-loader.js'

Thus your stylus files will be handled by webpack.

Then require stylus files and Style react component into you applications.

var Style = require('node-stylus-require/Style.js')
var MainCSS = require('./Main.styl')

Finally, add them to you page use the React render function.

render() {
    return (
        <div id="main">
            <h1>Example</h1>
            <Link to="example">Go to example</Link>
            <Style style={MainCSS}></Style>
        </div>
    );
}

The complete code is here! Run npm start in your shell to check it out.

Level 4 Isomorphic

This will be a complete awesome isomorphic application based on React, React-Engine, Express, Webpack and node-stylus-require. Let's get start.

Firstly, In your express entry, you should register node-stylus-require to support requiring stylus file.

var nodeStylusRequire = require('node-stylus-require')
nodeStylusRequire.register()

Then, add express interceptor to help backend rendering.

var app = express();
...
app.use(nodeStylusRequire.styleInterceptor)

Like the level 3, you need add 'node-stylus-loader' for webpack to handle '.styl' files, or webpack will throw errors.

test: /\.styl$/, loader: 'node-stylus-require/node-stylus-loader.js'

The next step is requiring stylus files and Style react component.

var listCSS = require('./List.styl')
var Style = require('node-stylus-require/Style.js')

Finally, add them to your application.

render: function render() {
    return (
        <div id='list'>
            <Style style={listCSS}></Style>
            <h1>Movies</h1>
            <h6>Click on a movie to see the details</h6>
        </div>
    );
  }

After that you can require all the stylus files in your React component like this, thus the stylus files are handled. The complete code is here, run npm start in your shell to check it out.

Additional Advice

For example if you want to create a React component name 'Example', thus will need to create 'Example.jsx'.

Folders and Files

Create a folder named 'Example' for the React component where 'Example.jsx' is.

The wise location of your stylus file with the suggested name 'Example.styl' should be in folder 'Example', that is the same folder holding 'Example.jsx'.

Relative Path or Absolute Path

Where in the 'Example.jsx' you should use relative path to stylus file of 'Example.styl'. For example, var EampleCSS = require('./Example.styl').

All this will help you move your React component to any place you want.

License

MIT (http://www.opensource.org/licenses/mit-license.php)