Bundle command
Summary:
Command which transpiles and bundles plugin code.
It is supposed to be used in "prepack" script for all open-sourced plugin packages to bundle them before publishing like this:
```
{
"devDependencies": {
"flipper-pkg": "latest"
},
"scripts": {
"prepack": "flipper-pkg bundle"
}
}
```
Also made directory parameter of other command "pack" optional so it also can be called from plugin directory simply by `flipper-pkg pack`.
Changelog: "flipper-pkg bundle" command for bundling plugins before publishing.
Reviewed By: mweststrate
Differential Revision: D21129691
fbshipit-source-id: 8f97bc950c28cf9ad8b0117c0e1d811ed1b988eb
This commit is contained in:
committed by
Facebook GitHub Bot
parent
105345facd
commit
1491e111c9
49
desktop/pkg/src/commands/bundle.ts
Normal file
49
desktop/pkg/src/commands/bundle.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @format
|
||||
*/
|
||||
|
||||
import {Command} from '@oclif/command';
|
||||
import {args} from '@oclif/parser';
|
||||
import fs from 'fs-extra';
|
||||
import path from 'path';
|
||||
import {runBuild, getPluginDetails} from 'flipper-pkg-lib';
|
||||
|
||||
export default class Bundle extends Command {
|
||||
public static description = 'transpiles and bundles plugin';
|
||||
|
||||
public static examples = [`$ flipper-pkg bundle optional/path/to/directory`];
|
||||
|
||||
public static args: args.IArg[] = [
|
||||
{
|
||||
name: 'directory',
|
||||
required: false,
|
||||
default: '.',
|
||||
description:
|
||||
'Path to plugin package directory for bundling. Defaults to the current working directory.',
|
||||
},
|
||||
];
|
||||
|
||||
public async run() {
|
||||
const {args} = this.parse(Bundle);
|
||||
const inputDirectory: string = path.resolve(process.cwd(), args.directory);
|
||||
const stat = await fs.lstat(inputDirectory);
|
||||
if (!stat.isDirectory()) {
|
||||
this.error(`Plugin source ${inputDirectory} is not a directory.`);
|
||||
}
|
||||
const packageJsonPath = path.join(inputDirectory, 'package.json');
|
||||
if (!(await fs.pathExists(packageJsonPath))) {
|
||||
this.error(
|
||||
`package.json is not found in plugin source directory ${inputDirectory}.`,
|
||||
);
|
||||
}
|
||||
const plugin = await getPluginDetails(inputDirectory);
|
||||
const out = path.resolve(inputDirectory, plugin.main);
|
||||
await fs.ensureDir(path.dirname(out));
|
||||
await runBuild(inputDirectory, plugin.source, out);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user