added readme and example
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
/.idea
|
||||
/node_modules
|
||||
node_modules/
|
||||
target/
|
||||
package-lock.json
|
||||
170
README.md
Normal file
170
README.md
Normal 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
52
example/gulpfile.js
Normal 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
14
example/package.json
Normal 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
BIN
example/resources/icon.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
14
example/src/Main.hx
Normal file
14
example/src/Main.hx
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,7 @@ class Config {
|
||||
this.assets = [];
|
||||
this.libs = [];
|
||||
this.macros = [];
|
||||
this.icon = null;
|
||||
this.meta = {
|
||||
title: null,
|
||||
filename: null,
|
||||
@@ -45,13 +46,14 @@ class Config {
|
||||
update(params) {
|
||||
this._params.push(params);
|
||||
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();
|
||||
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.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.meta !== undefined) this.meta = {...this.meta, ...params.meta};
|
||||
if (this.meta.icon) this.icon = path.resolve(cwd, this.meta.icon)
|
||||
}
|
||||
|
||||
branch(params) {
|
||||
|
||||
@@ -22,7 +22,9 @@ class Haxe extends Sdk {
|
||||
return `${this.binPath}/${name}.exe`;
|
||||
} else if (Sdk.System.isLinux) {
|
||||
const binPath = `${this.binPath}/${name}`;
|
||||
if (fs.existsSync(binPath)) {
|
||||
fs.chmodSync(binPath, 0o755);
|
||||
}
|
||||
return binPath;
|
||||
}
|
||||
throw `Unsupported OS: ${os.type()}`;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "gulp-haxetool",
|
||||
"version": "0.0.7",
|
||||
"description": "Haxe tool for gulp",
|
||||
"version": "0.0.8",
|
||||
"description": "HaXe Tool for Gulp",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"ansi-colors": "^1.1.0",
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<project>
|
||||
<meta title="<%=meta.title%>" package="<%=meta.pack%>" version="<%=meta.version%>" company="<%=meta.company%>"/>
|
||||
<app main="<%=main%>" path="<%=buildDir%>" file="<%=meta.filename%>"/>
|
||||
<icon path="<%=icon%>"/>
|
||||
<% sources.forEach(function(item) { %>
|
||||
<source path="<%=item%>"/><% }); %>
|
||||
<% assets.forEach(function(item) { %>
|
||||
|
||||
Reference in New Issue
Block a user