elm-make не компилируется при запуске с yarn на nixos

elm проект, над которым я работаю yarn на nixos, я не могу скомпилировать. Этот проект успешно компилируется для моих коллег, использующих macOS; возможно, отказ от компиляции на моей машине связан с тем, что я использую NixOS.

Когда я запускаю $ yarn start, я получаю следующий вывод терминала:

$ yarn start
yarn start v0.20.3
$ webpack-dev-server --env dev 
env dev
Project is running at http://0.0.0.0:3000/
webpack output is served from /
Content not from webpack is served from /home/matthew/backup/azara_work/platform/web/src
404s will fallback to /index.html
Running elm-make /home/matthew/backup/azara_work/platform/web/src/App.elm --yes --warn --debug --output /tmp/117814-7766-1wq3nh5.xanii6yldi.js

и когда я пытаюсь загрузить страницу с http://0.0.0.0:3000/, моя консоль браузера показывает следующие ошибки:

VM1496:1 Uncaught Error: Module build failed: Error: Compiler process exited with error Compilation failed
events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: spawn /home/matthew/backup/azara_work/platform/web/node_modules/elm/Elm-Platform/0.18.0/.cabal-sandbox/bin/elm-make ENOENT
    at exports._errnoException (util.js:1018:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:367:16)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
    at Module.runMain (module.js:606:11)
    at run (bootstrap_node.js:389:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:504:3

    at ChildProcess.<anonymous> (/home/matthew/backup/azara_work/platform/web/node_modules/node-elm-compiler/index.js:141:27)
    at emitTwo (events.js:106:13)
    at ChildProcess.emit (events.js:191:7)
    at maybeClose (internal/child_process.js:891:16)
    at Socket.<anonymous> (internal/child_process.js:342:11)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at Pipe._handle.close [as _onclose] (net.js:497:12)
    at exports._errnoException (util.js:1018:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:367:16)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
    at Module.runMain (module.js:606:11)
    at run (bootstrap_node.js:389:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:504:3

    at ChildProcess.<anonymous> (/home/matthew/backup/azara_work/platform/web/node_modules/node-elm-compiler/index.js:141:27)
    at emitTwo (events.js:106:13)
    at ChildProcess.emit (events.js:191:7)
    at maybeClose (internal/child_process.js:891:16)
    at Socket.<anonymous> (internal/child_process.js:342:11)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at Pipe._handle.close [as _onclose] (net.js:497:12)
    at eval (eval at ./src/App.elm (http://0.0.0.0:3000/index.js:4316:1), <anonymous>:1:7)
    at Object../src/App.elm (http://0.0.0.0:3000/index.js:4316:1)
    at __webpack_require__ (http://0.0.0.0:3000/index.js:658:30)
    at fn (http://0.0.0.0:3000/index.js:86:20)
    at eval (eval at ./src/index.js (http://0.0.0.0:3000/index.js:4324:1), <anonymous>:7:13)
    at Object../src/index.js (http://0.0.0.0:3000/index.js:4324:1)
    at __webpack_require__ (http://0.0.0.0:3000/index.js:658:30)
    at fn (http://0.0.0.0:3000/index.js:86:20)
    at Object.0 (http://0.0.0.0:3000/index.js:4333:18)
    at __webpack_require__ (http://0.0.0.0:3000/index.js:658:30)

а также

./src/App.elm
Module build failed: Error: Compiler process exited with error Compilation failed
events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: spawn /home/matthew/backup/azara_work/platform/web/node_modules/elm/Elm-Platform/0.18.0/.cabal-sandbox/bin/elm-make ENOENT
    at exports._errnoException (util.js:1018:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:367:16)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
    at Module.runMain (module.js:606:11)
    at run (bootstrap_node.js:389:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:504:3

    at ChildProcess.<anonymous> (/home/matthew/backup/azara_work/platform/web/node_modules/node-elm-compiler/index.js:141:27)
    at emitTwo (events.js:106:13)
    at ChildProcess.emit (events.js:191:7)
    at maybeClose (internal/child_process.js:891:16)
    at Socket.<anonymous> (internal/child_process.js:342:11)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at Pipe._handle.close [as _onclose] (net.js:497:12)
 @ ./src/index.js 2:12-32
 @ multi (webpack)-dev-server/client?http://0.0.0.0:3000 webpack/hot/dev-server ./src/index.js

Похоже, что проблема может иметь какое-то отношение к elm-make, поскольку он присутствует в обеих ошибках. Мой путь находит elm-make в

$ which elm-make
/home/matthew/.nix-profile/bin/elm-make

расположение отличается от пути, по которому сообщение об ошибке пытается найти elm-make (/home/matthew/backup/azara_work/platform/web/node_modules/elm/Elm-Platform/0.18.0/.cabal-sandbox/bin/elm-make). Мне интересно, может ли это быть связано с проблемой.

В каталоге, указанном в ошибке, elm-make действительно присутствует при перечислении через ls:

$ ls /home/matthew/backup/azara_work/platform/web/node_modules/elm/Elm-Platform/0.18.0/.cabal-sandbox/bin/
elm  elm-make  elm-package  elm-reactor  elm-repl

Однако, когда я пытаюсь запустить команду, указанную в выходных данных yarn start, за исключением замены elm-make на elm-make по этому пути узлов-модулей, я получаю ошибку «Нет такого файла или каталога».

$ ./node_modules/elm/Elm-Platform/0.18.0/.cabal-sandbox/bin/elm-make /home/matthew/backup/azara_work/platform/web/src/App.elm --yes --warn --debug --output /tmp/117814-7422-1p5ad15.q2uqqzd7vi.js
-bash: ./node_modules/elm/Elm-Platform/0.18.0/.cabal-sandbox/bin/elm-make: No such file or directory

Почему я могу получить эту ошибку «Нет такого файла или каталога» при попытке запустить этот «узел-модули» elm-make, когда исполняемый файл хорошо виден при листинге через ls?

Не удалось ли скомпилировать ошибку из-за разницы в расположении пути между моим путем elm-make и другим путем в 'node-modules'? Возможно, пряжа не та. Если да, как я могу настроить пряжу на правильный elm-make?

Как я могу заставить yarn start успешно скомпилировать проект?

Совет очень ценится; Я застрял на этом какое-то время.


person mherzl    schedule 14.09.2017    source источник


Ответы (1)


Я предлагаю вам сделать установку elm необязательной (как-то) для NixOS. Обычно проще всего, если вы создаете shell.nix, который все используют, и вообще избегаете зависимости от nix через npm.

Причина, по которой elm-make не существует, связана с интерпретатором ELF, который находится в другом месте для NixOS.

Попробуйте ldd ./node_modules/elm/Elm-Platform/0.18.0/.cabal-sandbox/bin/elm-make

Быстрое исправление - это символическая ссылка всех двоичных файлов в ls -la $(nix-build -A elmPackages.elm '<nixpkgs>')/bin на вашу песочницу Cabal.

person iElectric    schedule 14.09.2017
comment
Создание символической ссылки $ ln -s /home/matthew/.nix-profile/bin/elm-make из корзины /home/matthew/backup/azara_work/platform/web/node_modules/elm/Elm-Platform/0.18.0/.cabal-sandbox/bin песочницы сработало. Спасибо! - person mherzl; 17.09.2017