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

mortalbuild

v0.1.0

Published

A simple, straightforward build tool implemented in JavaScript

Downloads

2

Readme

MortalBuild

A simple, straightforward build tool implemented in JavaScript.

This tool was designed to be the build system for MortalSim libraries and modules, which are generally written in C++, but the tool is generic enough that it could theoretically work with several other languages as well.

Requires Node version >= 6.5

Installation

npm install mortalbuild

Usage

const MortalBuild = require('mortalbuild');

// MortalBuild simply runs commands on a subprocess. For this it provides a simple
// execution pool to run these commands in parallel. By creating one and providing
// it to each of the build calls, the ExecPool can optimize CPU utilization for
// the build process
var pool = new MortalBuild.ExecPool();

// Create a build definition object (this one uses GCC to build C++ object files)
var buildDef = {
      // File extension for the target file(s) (this will be appended
      // automatically to the target, don't add it to the TPL string!)
      ext: '.o'
      // Command to invoke
      cmd: 'g++'
      // Any includes for various builds
      includes:
        // Included for all builds
        all:
          - 'include/',
          - 'my/other/include/'
        // Included only for dev builds
        dev: 'src/include',
        // Included only for production builds
        prod: 'prod/include',
        // Included only for test builds
        test:
          - 'test/include/',
          - 'dep/Catch2/single_include'
      // Any necessary flags for the command
      args:
        // Optionally, FLAGS can be defined with ALL:, DEV:, and/or
        // PROD: properties which will cause it to change depending
        // on whether it's a development or production build.

        // These flags will be used for all builds
        all: '-std=c++14 -Iinclude/'
        // These will be used only for dev builds
        dev: '-Wall -Weffc++ -g'
        // These will be used only for production builds
        prod: '-O3'
        // These will be used only for test builds
        test: ''
      // ECMAScript template for the build command. Use ${source}
      // for the source file(s) and ${target} for the target file
      tpl: '${cmd} ${args} -c -o ${target} ${source}'
};

// Run the build! This returns a promise so you can use it to be
// notified when all build commands are complete
MortalBuild.build({
  execPool: pool,
  buildDef: buildDef,
  dev: true, // use the dev settings
  src: 'src/*',
  targetDir: 'build/'
}).then(() => {
  console.log('Build complete!')
});

Options

| Option | Type | Default | Description
| -------------- | ------------------ | ---------------------------- | ------------------------------------------------------- | execPool | ExecPool | ExecPool(os.cpus().length()) | ExecPool object for running commands in parallel | buildDef | Object | | Required build definition object (see below) | dev | Boolean | False | Whether to use dev arguments | src | String or [String] | | Source file(s) | target | String | | Target file (if no targetDir provided) | targetDir | String or [String] | | Target file directory (if no target provided) | forceRun | Boolean | False | Forces a run, even if the target is newer than source | execOpts | Object | {} | Options passed to child_process.exec

Build Definition Object

The Build definition object (buildDef in the options above) defines the command to be run. These commands are run via child_process.exec. The options to define these commands are as follows:

| Option | Type | Description
| -------------- | ------------------ | ------------------------------------------------------- | ext | String | Target file extension | cmd | String | Command to execute | incl | string | Include flag string (ex. "-I" for gcc or "/I" for msvc) | includes | String or Object | Includes to pass to the cmd | args | String or Object | Arguments to pass to the cmd | tpl | String | ECMAScript template string for the command.

The tpl template will be compiled at runtime with ${target} set to the target file and ${source} set to the source file(s). The target extension (designated by ext) will be added internally. ${ext} should never be in the template string.