#node.js #webgl #nixos
Вопрос:
У меня есть эта оболочка.никс:
with import <nixpkgs> {};
stdenv.mkDerivation {
name = "env";
nativeBuildInputs = [ pkg-config ];
buildInputs = [
xorg.libX11
xorg.libX11.dev
xorg.libXi
xorg.libXext
libGL
];
}
Затем я вхожу в оболочку с nix-shell shell.nix
и
$ npm install gl
Я думаю, он строится правильно.
Я создал index.js с примером из домашней страницы проекта README
// Create context
var width = 64
var height = 64
var gl = require('gl')(width, height, { preserveDrawingBuffer: true })
//Clear screen to red
gl.clearColor(1, 0, 0, 1)
gl.clear(gl.COLOR_BUFFER_BIT)
//Write output as a PPM formatted image
var pixels = new Uint8Array(width * height * 4)
gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels)
process.stdout.write(['P3n# gl.ppmn', width, " ", height, 'n255n'].join(''))
for(var i = 0; i < pixels.length; i = 4) {
for(var j = 0; j < 3; j) {
process.stdout.write(pixels[i j] ' ')
}
}
когда я запускаю это:
$ node index.js
Я получил ошибку:
/home/roman/personal_projects/nixos/nixos-headless-gl-error-no-webgl/index.js:20
gl.clearColor(1, 0, 0, 1)
^
TypeError: Cannot read property 'clearColor' of null
at Object.<anonymous> (/home/roman/personal_projects/nixos/nixos-headless-gl-error-no-webgl/index.js:20:4)
at Module._compile (internal/modules/cjs/loader.js:1085:14)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
at Module.load (internal/modules/cjs/loader.js:950:32)
at Function.Module._load (internal/modules/cjs/loader.js:790:12)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
at internal/main/run_main_module.js:17:47
Ответ №1:
Работает. Теперь я сбежал.никс:
with import <nixpkgs> {};
stdenv.mkDerivation {
name = "env";
APPEND_LIBRARY_PATH = "${lib.makeLibraryPath [ libGL libuuid ]}";
shellHook = ''
export LD_LIBRARY_PATH="$APPEND_LIBRARY_PATH:$LD_LIBRARY_PATH"
'';
}
и nix-shell run.nix
и
$ nix-shell run.nix
$ echo $LD_LIBRARY_PATH | tr ':' 'n'
/nix/store/hwnjiqml5vvlngdj9nrnwg0qzglhgk2r-util-linux-2.36.2/lib
/nix/store/c35w5n0prvq4v4priyi8fiiq361pmyvp-libGL-1.3.3/lib
/nix/store/a1xkyw98lgj38kymim78a7xjk50wqg6k-telepathy-glib-0.24.2/lib
/nix/store/nzp3cc7bsj83dn23b4vvrvsp9psgg50m-telepathy-logger-0.8.2/lib
$ node index.js
P3
# gl.ppm
64 64
255
255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0
...
Комментарии:
1. Атрибуты не интерполируются оболочкой, поэтому
$LD_LIBRARY_PATH
дословно описываются в вашей среде. Вы можете удалить его (если это не нужно пользователям этого expr) или преобразовать вexport
инструкциюshellHook
, которая выполняется как обычная bash, включая интерполяцию.