Skip to content

posthtml/posthtml-load-config

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

npm node deps tests coverage code style chat

Load Config

Autoload Config for PostHTML

Install

npm i -D posthtml-load-config

Usage

npm i -S|-D posthtml-plugin posthtml-plugin ...

Install plugins and save them to your package.json

package.json

Create a posthtml section in package.json.

Root
  |– client
  |– public
  |
  |- package.json
{
  "posthtml": {
    "parser": "posthtml-sugarml",
    "from": "/path/to/src/file.sml",
    "to": "/path/to/dest/file.html",
    "plugins": {
      "posthtml-plugin": {}
    }
  }
}

.posthtmlrc

Create a .posthtmlrc file.

Root
  |– client
  |– public
  |
  |-.posthtmlrc
  |- package.json
{
  "parser": "posthtml-sugarml",
  "from": "/path/to/src/file.sml",
  "to": "/path/to/dest/file.html",
  "plugins": {
    "posthtml-plugin": {}
  }
}

posthtml.config.js

Create a posthtml.config.js file.

Root
  |– client
  |– public
  |
  |- posthtml.config.js
  |- package.json
module.exports = (ctx) => {
  return {
    parser: ctx.ext === '.sml' ? 'posthtml-sugarml' : false,
    from: ctx.from,
    to: ctx.to,
    plugins: {
      'posthtml-plugin': ctx.plugin
    }
  }
}

Plugins can be loaded either using an {Object} or an {Array} in config.plugins.

{Object}
module.exports = (ctx) => {
  return {
    ...options,
    plugins: {
      'posthtml-plugin': ctx.plugin
    }
  }
}
{Array}
module.exports = (ctx) => {
  return {
    ...options,
    plugins: [
      require('posthtml-plugin')(ctx.plugin)
    ]
  }
}

⚠️ When using an Array, make sure to require() them.

Options

parser:

parser: 'posthtml-sugarml'

from:

from: 'path/to/src/file.sml'

to:

to: 'path/to/dest/file.html'

render:

render: 'posthtml-jsx'

Plugins

Options

{} || null: Plugin loads with defaults.

'posthtml-plugin': {} || null

⚠️ {} must be an empty object

[Object]: Plugin loads with given options.

'posthtml-plugin': { option: '', option: '' }

false: Plugin will not be loaded.

'posthtml-plugin': false

Order

Plugin order is determined by declaration in the plugins section.

{
  plugins: {
    'posthtml-plugin': {}, // plugins[0]
    'posthtml-plugin': {}, // plugins[1]
    'posthtml-plugin': {}  // plugins[2]
  }
}

Context

When using a function (posthtml.config.js), it is possible to pass context to posthtml-load-config, which will be evaluated while loading your config. By default ctx.env (process.env.NODE_ENV) and ctx.cwd (process.cwd()) are available.

Examples

posthtml.config.js

module.exports = (ctx) => ({
  parser: ctx.ext === '.sml' ? 'posthtml-sugarml' : false,
  from: ctx.from,
  to: ctx.to,
  plugins: {
    posthtml-include: {},
    posthtml-expressions: { locals: ctx.locals },
    htmlnano: ctx.env === 'production' ? {} : false
  }
})

"scripts": {
  "build": "NODE_ENV=production node posthtml",
  "start": "NODE_ENV=development node posthtml"
}
import { readFileSync } = require('fs')

const posthtml = require('posthtml')
const posthtmlrc = require('posthtml-load-config')

const sml = readFileSync('index.sml', 'utf8')

const ctx = { ext: '.sml' }

posthtmlrc(ctx).then(({ plugins, options }) => {
  posthtml(plugins)
    .process(sml, options)
    .then((result) => console.log(result.html))
})

npm i -D gulp-posthtml

package.json

"scripts": {
  "build": "NODE_ENV=production gulp",
  "start": "NODE_ENV=development gulp"
}

gulpfile.js

import { task, src, dest } from 'gulp'
import plugins from 'gulp-load-plugins'

task('pug', () => {
  const ctx = { locals: {} }

  return src('src/*.pug')
    .pipe(posthtml(ctx))
    .pipe(rename({ ext: '.html' }))
    .pipe(dest('dest'))
})

task('sml', () => {
  return src('src/*.sml')
    .pipe(posthtml())
    .pipe(rename({ ext: '.html' }))
    .pipe(dest('dest'))
})

task('html', () => {
  return src('src/*.html')
    .pipe(posthtml())
    .pipe(dest('dest'))
})

npm i -D html-loader posthtml-loader

package.json

"scripts": {
  "build": "NODE_ENV=production webpack",
  "start": "NODE_ENV=development webpack-dev-server"
}

webpack.config.js

module.exports = (env) => {
  module: {
    rules: [
      {
        test: /\.html$/
        use: [
          'html-loader',
          'posthtml-loader'
        ]
      }
    ]
  }
}

Maintainer


Michael Ciniawsky

Contributors