Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,18 @@
"prepare": "npm run -s build",
"prepare:babel": "babel --presets env src/*.js -d dist && npm t",
"lint": "eslint src",
"test:build": "node dist/cli.js --no-compress --cwd test/demo",
"test:build:ts": "node dist/cli.js --no-compress --cwd test/ts-demo --entry=src/index.ts",
"test": "npm run -s lint && npm run -s build && npm run -s test:build && npm run -s test:build:ts",
"test": "npm run -s lint && npm run -s build && jest",
"release": "npm run -s prepare && npm test && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish"
},
"repository": "developit/microbundle",
"eslintConfig": {
"extends": "eslint-config-developit"
},
"babel": {
"presets": [
"env"
]
},
"keywords": [
"bundle",
"rollup",
Expand Down Expand Up @@ -66,6 +69,9 @@
"babel-cli": "^6.26.0",
"babel-preset-env": "^1.6.1",
"eslint": "^4.15.0",
"eslint-config-developit": "^1.1.1"
"eslint-config-developit": "^1.1.1",
"fs-extra": "^5.0.0",
"jest": "^22.1.4",
"strip-ansi": "^4.0.0"
}
}
17 changes: 12 additions & 5 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import promisify from 'es6-promisify';
import glob from 'glob';
import autoprefixer from 'autoprefixer';
import { rollup, watch } from 'rollup';
import acornJsx from 'acorn-jsx';
import nodent from 'rollup-plugin-nodent';
import commonjs from 'rollup-plugin-commonjs';
import nodeResolve from 'rollup-plugin-node-resolve';
Expand Down Expand Up @@ -33,26 +34,32 @@ const WATCH_OPTS = {
};

export default async function microbundle(options) {
let cwd = options.cwd = resolve(process.cwd(), options.cwd);
let cwd = options.cwd = resolve(process.cwd(), options.cwd),
hasPackageJson = true;

try {
options.pkg = JSON.parse(await readFile(resolve(cwd, 'package.json'), 'utf8'));
}
catch (err) {
console.warn(chalk.yellow(`${chalk.yellow.inverse('WARN')} no package.json found.`));
process.stderr.write(chalk.yellow(`${chalk.yellow.inverse('WARN')} no package.json found. Assuming a name of "${basename(options.cwd)}".`)+'\n');
let msg = String(err.message || err);
if (!msg.match(/ENOENT/)) console.warn(` ${chalk.red.dim(msg)}`);
options.pkg = {};
hasPackageJson = false;
}

if (!options.pkg.name) {
options.pkg.name = basename(options.cwd);
console.warn(chalk.yellow(`${chalk.yellow.inverse('WARN')} missing package.json "name" field. Assuming "${options.pkg.name}".`));
if (hasPackageJson) {
process.stderr.write(chalk.yellow(`${chalk.yellow.inverse('WARN')} missing package.json "name" field. Assuming "${options.pkg.name}".`)+'\n');
}
}

const jsOrTs = async filename => resolve(cwd, `${filename}${await isFile(resolve(cwd, filename+'.ts')) ? '.ts' : '.js'}`);

options.input = [];
[].concat(
options.entries && options.entries.length ? options.entries : options.pkg.source || (await isDir(resolve(cwd, 'src')) && 'src/index.js') || (await isFile(resolve(cwd, 'index.js')) && 'index.js') || options.pkg.module
options.entries && options.entries.length ? options.entries : options.pkg.source || (await isDir(resolve(cwd, 'src')) && await jsOrTs('src/index')) || await jsOrTs('index') || options.pkg.module
).map( file => glob.sync(resolve(cwd, file)) ).forEach( file => options.input.push(...file) );

let main = resolve(cwd, options.output || options.pkg.main || 'dist');
Expand Down Expand Up @@ -217,7 +224,7 @@ function createConfig(options, entry, format, writeMeta) {
},
parser: {
plugins: {
jsx: require('acorn-jsx')
jsx: acornJsx
}
}
}),
Expand Down
31 changes: 31 additions & 0 deletions test/demo.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import path from 'path';
import fs from 'fs-extra';
import { strip } from './lib/util';
import microbundle from '../src/index';

describe('demo', () => {
it('should produce build files', async () => {
let output = await microbundle({
cwd: path.resolve(__dirname, 'fixtures/demo'),
formats: 'es,cjs,umd'
});

expect(strip(output)).toEqual(strip(`
Build output to dist:
225 B: demo.js
225 B: demo.m.js
295 B: demo.umd.js
`));

let dist = await fs.readdir(path.resolve(__dirname, 'fixtures/demo/dist'));

expect(dist).toEqual([
'demo.js',
'demo.js.map',
'demo.m.js',
'demo.m.js.map',
'demo.umd.js',
'demo.umd.js.map'
]);
});
});
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
3 changes: 3 additions & 0 deletions test/lib/util.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import stripAnsi from 'strip-ansi';

export const strip = s => stripAnsi(s).replace(/(?:^[\n\s]+|[\n\s]+$|(^|\n)\s+)/gm, '$1');
31 changes: 31 additions & 0 deletions test/ts-demo.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import path from 'path';
import fs from 'fs-extra';
import { strip } from './lib/util';
import microbundle from '../src/index';

describe('ts-demo', () => {
it('should produce build files', async () => {
let output = await microbundle({
cwd: path.resolve(__dirname, 'fixtures/ts-demo'),
formats: 'es,cjs,umd'
});

expect(strip(output)).toEqual(strip(`
Build output to dist:
106 B: ts-demo.js
106 B: ts-demo.m.js
175 B: ts-demo.umd.js
`));

let dist = await fs.readdir(path.resolve(__dirname, 'fixtures/ts-demo/dist'));

expect(dist).toEqual([
'ts-demo.js',
'ts-demo.js.map',
'ts-demo.m.js',
'ts-demo.m.js.map',
'ts-demo.umd.js',
'ts-demo.umd.js.map'
]);
});
});
3 changes: 0 additions & 3 deletions test/ts-demo/package.json

This file was deleted.