compatible with commonjs spec