Скомпилировано для разных NODE_MODULE_VERSION - парсер Tree-sitter, пакет ATOM

Я создал парсер tree-sitter, который разбирает некоторый устаревший язык SAP, который мы используем, чтобы сделать пакет совместимым с ATOM. Я буду очень грамотен в своих действиях, так как не очень уверен, где ошибся.

Согласно документации tree-sitter, я читал много руководств - я сделал следующее:

Добавлен D:\path-to-project\node_modules.bin в PATH

npm install -g node-gyp (I have installed the dependencies - MSVC 2017 and Python 2.7)

Создал новый каталог и cd к нему:

npm init (followed the dialog)
npm install
npm install --save-dev nan
npm install --save-dev tree-sitter-cli

Теперь мы можем создать наш файл tree-sitter grammar.js и сгенерировать парсер tree-sitter, что я сделал:

Создал grammar.js и записал необходимую грамматику. Открыл CMD, cd в папку проекта и:

tree-sitter generate
node-gyp configure
node-gyp build
tree-sitter test (To check if the parser is working correctly, which it does)

Соответственно, теперь я могу интегрировать парсер в пакет ATOM. Итак, я опубликовал созданный мной парсер tree-sitter в npm через - 'npm publish', затем:

Я создал пакет из функции ATOMs Generate package, создал "грамматический" каталог в пакете и файл.cson со следующими значениями:

name: 'Human readable name'
scopeName: 'A unique, stable identifier for the language.'
type: 'tree-sitter' (indicates that we are using tree-sitter grammar not TextMate one)
parser: 'Here we must the npm package name that we published to NPM' 
fileTypes: ['array of file extensions that the package will run on for example 'cpp'']

Вот где становится интересно. После 'npm install my-npm-package-name' внутри моего каталога пакетов ATOM я получаю сообщение об ошибке внутри ATOM:

The module '\\?\D:\Users\myUser\github\my-ATOM-package-name\node_modules\my-tree-sitter-npm-package    
\build\Release\my-tree-sitter-npm-package_binding.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 72. This version of Node.js requires
NODE_MODULE_VERSION 73. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`). 
in D:\Users\myUser\.atom\packages\my-ATOM-package-name\grammars\the-cson-file-mentioned.cson

Из проведенного мной веб-исследования это связано с тем, что ATOM использует версию NodeJs, отличную от той, которую я использую (NodeJs v 12.4.0). Вот где я застрял, после многих попыток перекомпиляции с помощью "перестройки электрона" я безуспешно отказался и решил, что мне нужен более опытный помощник.

Я разрабатываю и устанавливаю на Windows. NodeJS устанавливается с nvm, а я разрабатываю с v12.4.0.

1 ответ

Решение

Мне удалось решить проблему. По всей видимости, вам следует:

npm install --save-dev electron@6.1.12 (the current electron version atom was using at the time)
npm install --save-dev electron-rebuild 

electron-rebuild --version 6.1.12 (the current electron version atom was using at the time)

Если он по-прежнему жалуется, что вы используете другую версию, вам следует:

node-gyp rebuild
electron-rebuild --version 6.1.12 (the current electron version atom was using at the time)

Перед публикацией в npm: удалите файлы binding.gyp, package-lock.json и двоичную папку Electron.

Другие вопросы по тегам