0.7.12 • Published 4 years ago

@iosio/create-x-project v0.7.12

Weekly downloads
47
License
MIT
Repository
-
Last release
4 years ago

@iosio/create-x-project

Cli for generating, developing and bundling modern web apps and libraries

Awesome for building preact/react or web component libraries and apps!

Features:

  • all the rollup and babel stuff is figured out for you behind the scenes
  • live reloading dev server
  • optional multiBuildApp mode for legacy browsers using System es module shims.
  • conditional polyfills for web apps
  • file/image asset bundling
  • post css loader
  • minifies and autoprefixes css template tag literals with keyword 'jcss'.
  • minifies tag template literals using keyword 'minify'
  • ..and more

Installation

mkdir my_app
cd my_app
npx @iosio/create-x-project

or

npm install -g @iosio/create-x-project
mkdir my_app
cd my_app
create-x-project

follow the prompts then run npm/yarn install.

Commands

(x is just an alias to create-x-project command)

x start

starts the dev server at port:3000 and watches for file changes: src > build.

x build_app

creates a production build for a web application: src > build.

x build_lib

creates a production library as a npm installable es module: src > lib.

x serve_build

serves up the build

Command line options

--cwd

change the current working directory

x start --cwd some/other/directory

--project

selects a override options from your configuration object

--app_env

Specify which envs to use in your config

x start --project demo --app_env dev

--help

List cli options

Configuration (optional)

Define optional configuration JSON object in package.json as xProjectConfig

{ 
  "name": "my_app",
  "verson": "1.0.0",
  "xProjectConfig":{
    ...
  }
} 

You may instead export default a configuration object from xProjectConfig.js at the root of the project directory

// xProjectConfig.js
module.exports = {
    ...
}

Configuration Properties

export default {
    
    //js entry point
    // may pass an array, comma separated string or glob patter "src/*"
    input: /*default*/ '/src/index.js', 
    
    //location of index.html file. entry (input) script is automatically inserted at build time
    html: /*default*/ '/src/index.html',
    
    //location where the dev build is placed and served from
    output: /*default*/ '/build', // will output to /lib by default when the command build_lib is used
    
    //browserlist target browsers
    browsers: /*default*/    
      [ // looks for browserlist in package.json if none provided, else defaults to these for multiBuildApp
        "last 2 Chrome major versions",
        "last 2 ChromeAndroid major versions",
        "last 2 Firefox major versions",
        "last 2 Edge major versions",
        "last 2 Safari major versions",
        "last 2 iOS major versions"
      ], 
    
    //browserlist specific to css auto prefixer in case it differs from js
    cssBrowsers: /*default*/ browsers, //uses the browsers option if none provided
    
    //if true, creates an additional legacy build
    // @TODO: needs work  
    // multiBuildApp: /*default*/ undefined,
    
    //set to false to disable conditional polyfills 
    polyfills: /*default*/true,

    //compresses code using terser
    compress: /*default*/ true, 
    
    // specify the output format. uses 'modern' and 'system' for multi build apps
    format: /*default*/ 'modern', // umd,es,iife... see rollup docs for more info on supported formats
    
    //jsx pragma
    jsx: /*default*/ 'h',
    //jsx pragmaFrag
    jsxFragment: /*default*/ 'Fragment',
    
    //set sourcemap to false to disable sourcemapping
    sourcemap: /*default*/ true, 
    
    //Enforce undefined global context and add "use strict"
    strict: /*default*/ undefined,
    
    //node or web
    target: /*default*/ 'web',
    
    // pass an array of files to copy from input to output
    // ex: ['node_modules/@iosio/fuse-worker/lib/fuse.worker.js', 'src/imgs/favicon.co']
    copyConfig: /*default*/ undefined, 
    
    //Replace constants with hard-coded values
    define: /*default*/ undefined, // 'API_KEY=1234,hello="asdf"'
    
    //Specify globals dependencies, or 'none'
    globals: /*default*/ undefined,

    //specify external dependencies or 'none'. 'none' bundles everything
    external: /*default*/ undefined, // pass comma separated values 'chartist,some,external,dependency' 
            
    //alias imported dependencies
    alias: /*default*/ undefined, //ex: 'react=preact/compat',
    
    //specify extensions to files you'd like to import as strings (such as markdown and html files)
    importAsString: /*default*/ undefined,
    /*
        //rollup-plugin-string options
        {
               // Required to be specified
                  include: "**/*.html",
            
                  // Undefined by default
                  exclude: ["**/index.html"]
        }    
    */
    //live reloading dev server. see https://browsersync.io/docs/options for more info.
    devServer: /*default*/ undefined, 
    /*
        {
            historyApiFallback,//(default: true) set this to false for non SPA builds
            baseDir, // uses the the primary config 'output' option
            // all other options map to browsersync config. see browsersync docs 
        }
    */   
    
    //environment variables. see next section for explanation 
    envs: /*default*/ undefined
}

Environment Variables

Define environment variables in the config object under 'envs' as an object where the key represents the environment you are serving/building. You may use the '--app_env' flag to set this via script/command line'

// example:
xProjectConfig: { 
    
    envs: {
        dev: {
            API_URL: 'http://app.dev.com/api',
            SOME_OTHER_ENDPOINT: 'https://someotherendpoint.com'
        },
        prod:{
            API_URL: 'http://app.prod.com/api',
            SOME_OTHER_ENDPOINT: 'https://someotherendpoint.com'
        }
    }
}

To apply the env variables, add the env name to the second argument on the x cli command:

x build prod

you may now access the env vars in your js files:

fetch(process.env.API_URL + '/get-stuff');
console.log(process.env.API_URL)
//build prod logs: 'http://app.prod.com/api/get-stuff'

jcss

minify and auto prefix css tagged template literals as so

//no import required, just use the keyword "jcss" and the bundler will 
// remove it and process the css. 
const minified_and_autoprefixed_css_string = jcss`
    .noSelect{
        user-select: none;
    }
`;

//You may configure the target browsers on the browsers property of the config object.
//Depending on the target, the output might look something like this:
const minified_and_autoprefixed_css_string = `.noSelect{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}`;

minify

minify tagged template literals as so

//no import required, just use the keyword "minify" and the bundler will 
// remove it and leave just the string. 
const minified_string = minify`
   <div>
        remove white space
   </div>
`;

//output
const minified_string = `<div>remove white space</div>`;

project overrides

By passing and option to the flag '--project', you can override the options in the config object. The options under the specified project will be prioritized over the other properties.

"xProjectConfig": {
    "project": {
        "demo": {
            "input": "demo/src/index.js",
            "html": "demo/src/index.html",
            "output": "demo/build"
        }
    },
    "input": "src/*"
}

Running the following in the command line will build an app from 'demo/src/index.js' to 'demo/build'

x build_app --project demo
0.7.12

4 years ago

0.7.8

4 years ago

0.7.7

4 years ago

0.7.6

4 years ago

0.7.5

4 years ago

0.7.4

4 years ago

0.7.3

4 years ago

0.7.2

4 years ago

0.7.1

4 years ago

0.7.0

4 years ago

0.6.7

4 years ago

0.6.6

4 years ago

0.6.5

4 years ago

0.6.4

4 years ago

0.6.3

4 years ago

0.6.2

4 years ago

0.6.1

4 years ago

0.6.0

4 years ago

0.5.85

4 years ago

0.5.86

4 years ago

0.5.83

4 years ago

0.5.84

4 years ago

0.5.81

4 years ago

0.5.79

4 years ago

0.5.80

4 years ago

0.5.74

4 years ago

0.5.73

4 years ago

0.5.71

4 years ago

0.5.70

4 years ago

0.5.69

4 years ago

0.5.68

4 years ago

0.5.63

4 years ago

0.5.62

4 years ago

0.5.60

5 years ago

0.5.59

5 years ago

0.5.58

5 years ago

0.5.57

5 years ago

0.5.56

5 years ago

0.5.55

5 years ago

0.5.54

5 years ago

0.5.53

5 years ago

0.5.52

5 years ago

0.5.51

5 years ago

0.5.50

5 years ago

0.5.49

5 years ago

0.5.48

5 years ago