Modules - chung-leong/zigar GitHub Wiki
JavaScript | PHP
In the Zig language, a module is actually a struct without any fields. Only declarations of constants, variables, and functions. Since the object representing a struct type behaves like a JavaScript class, you can think of declarations within a module as static members.
Zigar exports all public declarations in a module using its own mechanism. You do not need to
use the export keyword.
Importing as ECMAScript module
When you import a Zig module into JavaScript using ESM syntax, the default export is the module object. Constants and functions (but not variables) are also available as named exports:
const std = @import("std");
pub const pi = std.math.pi;
pub var number: i33 = 123;
pub fn hello() void {
std.debug.print("Hello world", .{});
}
import module, { hello, pi } from './module-example-1.zig';
console.log(module.pi);
console.log(module.number);
module.hello();
hello();
console.log(pi);
3.141592653589793
123n
Hello world
Hello world
3.141592653589793
Importing as CommonJS module
When CommonJS is used, the object returned by require is the module.
Destructuring assignment
can be used to extract contants and functions for ease of use:
require('node-zigar/cjs');
const { pi, hello } = require('./module-example-1.zig');
hello();
console.log(pi);
Hello world
3.141592653589793
Exposing sub-modules
Since modules are structs, you can make a sub-module available simply by assigning it to a public constant in the root module:
const std = @import("std");
pub const example1 = @import("./module-example-1.zig");
import { example1 } from './module-example-2.zig';
example1.hello();
Hello world