Knockout Component Compiler

raw JSON →
0.5.0 verified Fri May 01 auth: no javascript

A single-file component compiler for Knockout.js, enabling Vue-like component authoring with <template>, <style scoped>, and <script> blocks. Version 0.5.0 is currently the latest and appears to be in early development with minimal release activity. Key differentiators: supports scoped styles, rollup integration via rollup-plugin-ko, and automatic component registration. Requires peer dependencies insert-css and robust-mixin.

error Cannot find module 'insert-css'
cause Missing peer dependency insert-css
fix
npm install insert-css
error compiler.compile is not a function
cause Incorrect import: using default import instead of named import
fix
Use import { compile } from 'ko-component-compiler' or const { compile } = require('ko-component-compiler')
error Unexpected token 'export'
cause Component script uses ES module syntax but babel plugin is not configured properly
fix
Add rollup-plugin-babel with es2015-rollup preset as shown in README.
gotcha The package uses a callback-based API; async/await not directly supported.
fix Wrap callback in a Promise or promisify the function.
gotcha Rollup integration requires multiple plugins: rollup-plugin-ko, rollup-plugin-babel, rollup-plugin-commonjs, rollup-plugin-node-resolve. Missing any will cause build failures.
fix Install all required rollup plugins and peer dependencies as shown in README.
gotcha The component script must use `export default` with a constructor and can include defaults, mixins, methods. Misusing the structure leads to runtime errors.
fix Ensure script block matches the expected ES module export pattern.
npm install ko-component-compiler
yarn add ko-component-compiler
pnpm add ko-component-compiler

Demonstrates compiling a single-file component using the ko-component-compiler compiler.compile() function.

const compiler = require('ko-component-compiler');

const source = `<template>
    <div class="btn">
        <span data-bind="text: text"></span>
    </div>
</template>

<style scoped>
    .btn { color: red; }
</style>

<script>
    export default {
        constructor: function (opts, info) {
            this.text = ko.observable(opts.text || 'Button');
        }
    };
</script>`;

compiler.compile(source, function (err, result) {
    if (err) {
        console.error(err);
    } else {
        console.log(result);
    }
});