What | tcl-duktape |
Where | https://github.com/dbohdan/tcl-duktape |
Description | A binary Tcl extension that proves bindings for Duktape, an embedded JavaScript interpreter. |
Platforms | Tested on Linux and FreeBSD. |
Prerequisites | Tcl 8.5 or newer, TclOO required for the OO wrapper. |
Updated | 2018-10-12 (v0.5.0) |
License | MIT |
Duktape is just a pair of .c/.h files, which makes the package easy to build. tcl-duktape allows you to call JavaScript code from Tcl and exposes a
jsproc interface similar to the
cproc interface in
Critcl that allows you to write procedures in JavaScript. Included in the package is a TclOO API wrapper for tcl-duktape objects and one for
JSON objects. No means to register Tcl callbacks to be called from JavaScript are currently provided.
Sample code edit
#!/usr/bin/env tclsh
package require duktape
package require duktape::oo
set duktapeObj [::duktape::oo::Duktape new]
$duktapeObj jsproc ::add {{a 0 number} {b 0 number}} {
return a + b;
}
puts [add 1 2]
$duktapeObj jsmethod cos {{deg 0 number}} {
return Math.cos(deg * Math.PI / 180);
}
puts [$duktapeObj cos 360]
$duktapeObj destroy
Discussion edit
[wiwo
] 17.02.2017: How can modules be loaded? When I try to load a JS file with require, I get "ReferenceError: identifier 'require' undefined"
dbohdan 2017-02-23: Duktape can't access the file system and thus has no
Node.js-style
require(). What you can do is read the module file in Tcl code and then have an interpreter instance
eval it. There is an
example that does this on the project wiki.
See also edit