added readme and example

This commit is contained in:
2018-04-25 22:04:09 +03:00
parent 373ee7703d
commit cb405efd26
10 changed files with 261 additions and 5 deletions

3
.gitignore vendored
View File

@@ -1,3 +1,4 @@
/.idea /.idea
/node_modules node_modules/
target/
package-lock.json package-lock.json

170
README.md Normal file
View File

@@ -0,0 +1,170 @@
# Gulp HaXe Tool
## Introducing
### Dignity
* Automatically download HaXe SDK, FlashPlayer, Adobe AIR SDK.
* Universal project config for simple HaXe build and OpenFL build.
* Branch project config for many build presets (many OpenFL apps in one project).
* Packaging linux output in DEB.
* Create html wrapper for flash output.
### Flaws
* Hardcode build output in {projectDir}/target (need param in Project.Config).
* HTML5 run output not caught.
* Adobe AIR Build System in progress.
* Packaging Windows application in progress (with [Inno Setup](http://www.jrsoftware.org/isinfo.php))
### Dependencies
* [Neko VM](https://nekovm.org/download/)
## API
### Project.Config
#### constructor
* **meta**: meta information
* **title**: application title
* **filename**: application filename
* **icon**: path to icon file
* **pack**: package name for OpenFL
* **author**: author name for DEB packaging
* **company**: company name for OpenFL
* **version**: application version
* **name**: name for output directory
* **libs**: list of haxe dependencies
* **sources**: list of HaXe sources
* **assets**: list of resources
* **main**: main class name
* **macros**: list of macros
### Project
#### constructor
* **buildSystem**: Project.BuildSystem
* **platforms**: Project.Platform (list supported)
* **config**: Project.Config
#### bind
* **module**
create gulp tasks in module:
```
<config.name>:<platform>:build
<config.name>:<platform>:run
<config.name>:<platform>:pack (optionaly if supported)
```
eg: ```gulp app:flash:build```
## Example
[package.json](example/package.json)
```json
{
"name": "app",
"version": "0.0.1",
"devDependencies": {
"gulp": "^4.0.0",
"gulp-clean": "^0.4.0",
"gulp-haxetool": "file:../../gulp-haxetool"
},
"haxeDependencies": {
"lime": "6.0.1",
"openfl": "7.0.0",
"hxcpp": "3.4.188"
}
}
```
[src/Main.hx](example/src/Main.hx)
```haxe
import flash.display.Shape;
import flash.Lib;
class Main {
public static function main() {
trace("Hello world!");
var shape = new Shape();
shape.graphics.beginFill(0x00ff00);
shape.graphics.drawCircle(50, 50, 20);
shape.graphics.endFill();
Lib.current.addChild(shape);
}
}
```
[gulpfile.js](example/gulpfile.js)
```javascript
const gulp = require('gulp');
const gulpClean = require('gulp-clean');
const packageInfo = require('./package.json');
const {Sdk, Haxe, Project} = require('gulp-haxetool');
//Sdk.dir = '/opt/sdk';
exports.clean = function clean() {
return gulp.src('target/*', {read: false}).pipe(gulpClean());
};
exports.install = function install() {
const haxe = new Haxe();
return haxe.prepare().then(() => haxe.install(packageInfo.haxeDependencies));
};
const config = new Project.Config({
meta: {
title: 'Application',
filename: 'app',
icon: './resources/icon.jpg',
pack: 'com.example',
author: 'Anonim <anonim@anonim.com>',
company: 'Any company',
version: packageInfo.version,
},
name: 'app',
libs: packageInfo.haxeDependencies,
sources: ['src'],
assets: ['resources'],
main: 'Main',
});
const project = new Project(
Project.BuildSystem.OPENFL,
[
Project.Platform.FLASH,
Project.Platform.HTML5,
Project.Platform.LINUX,
],
config
).bind(module, gulp);
module.exports.default = gulp.series(
exports.clean,
exports.install,
module.exports['app:flash:build'],
module.exports['app:html5:build'],
module.exports['app:linux:build'],
module.exports['app:flash:pack'],
module.exports['app:linux:pack'],
);
```
Build for all platforms: `gulp default`
Build app for specific platform: `gulp app:flash:build`
Run flash app in flashplayer: `gulp app:flash:run`
Run html5 app in brpwser: `gulp app:html5:tun`
Run linux app native: `gulp app:linux:run`

52
example/gulpfile.js Normal file
View File

@@ -0,0 +1,52 @@
const gulp = require('gulp');
const gulpClean = require('gulp-clean');
const packageInfo = require('./package.json');
const {Sdk, Haxe, Project} = require('gulp-haxetool');
//Sdk.dir = '/opt/sdk';
exports.clean = function clean() {
return gulp.src('target/*', {read: false}).pipe(gulpClean());
};
exports.install = function install() {
const haxe = new Haxe();
return haxe.prepare().then(() => haxe.install(packageInfo.haxeDependencies));
};
const config = new Project.Config({
meta: {
title: 'Application',
filename: 'app',
icon: './resources/icon.jpg',
pack: 'com.example',
author: 'Anonim <anonim@anonim.com>',
company: 'Any company',
version: packageInfo.version,
},
name: 'app',
libs: packageInfo.haxeDependencies,
sources: ['src'],
assets: ['resources'],
main: 'Main',
});
const project = new Project(
Project.BuildSystem.OPENFL,
[
Project.Platform.FLASH,
Project.Platform.HTML5,
Project.Platform.LINUX,
],
config
).bind(module, gulp);
module.exports.default = gulp.series(
exports.clean,
exports.install,
module.exports['app:flash:build'],
module.exports['app:html5:build'],
module.exports['app:linux:build'],
module.exports['app:flash:pack'],
module.exports['app:linux:pack'],
);

14
example/package.json Normal file
View File

@@ -0,0 +1,14 @@
{
"name": "app",
"version": "0.0.1",
"devDependencies": {
"gulp": "^4.0.0",
"gulp-clean": "^0.4.0",
"gulp-haxetool": "file:../../gulp-haxetool"
},
"haxeDependencies": {
"lime": "6.0.1",
"openfl": "7.0.0",
"hxcpp": "3.4.188"
}
}

BIN
example/resources/icon.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

14
example/src/Main.hx Normal file
View File

@@ -0,0 +1,14 @@
import flash.display.Shape;
import flash.Lib;
class Main {
public static function main() {
trace("Hello world!");
var shape = new Shape();
shape.graphics.beginFill(0x00ff00);
shape.graphics.drawCircle(50, 50, 20);
shape.graphics.endFill();
Lib.current.addChild(shape);
}
}

View File

@@ -28,6 +28,7 @@ class Config {
this.assets = []; this.assets = [];
this.libs = []; this.libs = [];
this.macros = []; this.macros = [];
this.icon = null;
this.meta = { this.meta = {
title: null, title: null,
filename: null, filename: null,
@@ -45,13 +46,14 @@ class Config {
update(params) { update(params) {
this._params.push(params); this._params.push(params);
if (params.name !== undefined) this.name = params.name; if (params.name !== undefined) this.name = params.name;
if (params.name !== undefined) this.main = params.main; if (params.main !== undefined) this.main = params.main;
const cwd = process.cwd(); const cwd = process.cwd();
if (params.sources !== undefined) this.sources = this.sources.concat(params.sources.map(item => path.resolve(cwd, item))); if (params.sources !== undefined) this.sources = this.sources.concat(params.sources.map(item => path.resolve(cwd, item)));
if (params.assets !== undefined) this.assets = this.assets.concat(params.assets.map(item => path.resolve(cwd, item))); if (params.assets !== undefined) this.assets = this.assets.concat(params.assets.map(item => path.resolve(cwd, item)));
if (params.libs !== undefined) this.libs = this.libs.concat(Array.isArray(params.libs) ? params.libs : Object.entries(params.libs).map(([k, v]) => ({name: k, version: v}))); if (params.libs !== undefined) this.libs = this.libs.concat(Array.isArray(params.libs) ? params.libs : Object.entries(params.libs).map(([k, v]) => ({name: k, version: v})));
if (params.macros !== undefined) this.macros = this.macros.concat(params.macros); if (params.macros !== undefined) this.macros = this.macros.concat(params.macros);
if (params.meta !== undefined) this.meta = {...this.meta, ...params.meta}; if (params.meta !== undefined) this.meta = {...this.meta, ...params.meta};
if (this.meta.icon) this.icon = path.resolve(cwd, this.meta.icon)
} }
branch(params) { branch(params) {

View File

@@ -22,7 +22,9 @@ class Haxe extends Sdk {
return `${this.binPath}/${name}.exe`; return `${this.binPath}/${name}.exe`;
} else if (Sdk.System.isLinux) { } else if (Sdk.System.isLinux) {
const binPath = `${this.binPath}/${name}`; const binPath = `${this.binPath}/${name}`;
fs.chmodSync(binPath, 0o755); if (fs.existsSync(binPath)) {
fs.chmodSync(binPath, 0o755);
}
return binPath; return binPath;
} }
throw `Unsupported OS: ${os.type()}`; throw `Unsupported OS: ${os.type()}`;

View File

@@ -1,7 +1,7 @@
{ {
"name": "gulp-haxetool", "name": "gulp-haxetool",
"version": "0.0.7", "version": "0.0.8",
"description": "Haxe tool for gulp", "description": "HaXe Tool for Gulp",
"main": "index.js", "main": "index.js",
"dependencies": { "dependencies": {
"ansi-colors": "^1.1.0", "ansi-colors": "^1.1.0",

View File

@@ -2,6 +2,7 @@
<project> <project>
<meta title="<%=meta.title%>" package="<%=meta.pack%>" version="<%=meta.version%>" company="<%=meta.company%>"/> <meta title="<%=meta.title%>" package="<%=meta.pack%>" version="<%=meta.version%>" company="<%=meta.company%>"/>
<app main="<%=main%>" path="<%=buildDir%>" file="<%=meta.filename%>"/> <app main="<%=main%>" path="<%=buildDir%>" file="<%=meta.filename%>"/>
<icon path="<%=icon%>"/>
<% sources.forEach(function(item) { %> <% sources.forEach(function(item) { %>
<source path="<%=item%>"/><% }); %> <source path="<%=item%>"/><% }); %>
<% assets.forEach(function(item) { %> <% assets.forEach(function(item) { %>