Обеспечьте и обеспечьте версию узла и npm в проекте React, предпочтительно с некоторой конфигурацией (package.json) [duplicate]

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

87
задан Erel Segal-Halevi 30 March 2015 в 15:06
поделиться

4 ответа

Я думаю, вы можете использовать поле «двигатели»:

{ "engines" : { "node" : ">=0.12" } }

Как вы говорите, ваш код определенно не будет работать с более низкими версиями, вы, вероятно, тоже захотите отметить флаг «engineStrict» :

{ "engineStrict" : true }

Документация для файла packages.json может быть найдена на сайте npmjs

Обновить

engineStrict теперь устарела, поэтому это даст только предупреждение. Теперь пользователю нужно запустить npm config set engine-strict true, если они этого захотят.

106
ответ дан IBam 19 August 2018 в 00:32
поделиться
  • 1
    github.com/npm/npm/blob/master/CHANGELOG.md#enginestrict «Редко используемая опция package.json engineStrict в течение нескольких месяцев была устаревшей , создавая предупреждения, когда он был использован. Начиная с npm @ 3, значение поля игнорируется, а нарушения двигателей будут вызывать предупреждения. Если вы, как пользователь, хотите строгое принудительное принудительное форматирование, просто запустите npm config set engine-strict true & quot; – Mike Stead 24 December 2015 в 03:22
  • 2
    Запомните cd .. && npm i <folder-name>, чтобы проверить сам проект. Однако это вызовет целую сборку в ней. – mlunoe 26 July 2016 в 23:20
  • 3
    почему на земле они осуждали это ... оно теряет все свое значение тогда – vasilakisfil 10 May 2017 в 13:52
  • 4
    Добавление engine-strict=true к вашему .npmrc теперь имеет тот же эффект – ben 13 June 2018 в 05:23

Как и сказал Ибам, engineStrict теперь устарел. Но я нашел это решение:

check-version.js:

import semver from 'semver';
import { engines } from './package';

const version = engines.node;
if (!semver.satisfies(process.version, version)) {
  console.log(`Required node version ${version} not satisfied with current version ${process.version}.`);
  process.exit(1);
}

package.json:

{
  "name": "my package",
  "engines": {
    "node": ">=50.9" // intentionally so big version number
  },
  "scripts": {
    "requirements-check": "babel-node check-version.js",
    "postinstall": "npm run requirements-check"
  }
}

Узнайте больше здесь: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4

.nvmrc

И еще одна вещь ... dotfile «.nvmrc» может использоваться для запроса определенной версии узла (но я еще не пробовал ее) - https: // github.com/creationix/nvm#nvmrc

26
ответ дан Adam 19 August 2018 в 00:32
поделиться

Добавить

в package.json

  "engines": {
    "node": ">=10.0.0",
    "npm": ">=6.0.0"
  },

в файл .npmrc (рядом с package.json, тот же каталог)

engine-strict=true
6
ответ дан Mikel 19 August 2018 в 00:32
поделиться

Есть еще один, более простой способ сделать это:

  1. npm install Node@8 (сохраняет Node 8 как зависимость в package.json)
  2. Ваше приложение будет работать с помощью Node 8

Это работает, потому что node - это всего лишь пакет, который отправляет узел в виде бинарного пакета. Он просто включает в себя node_module / .bin, что означает, что он только делает узел доступным для пакетных скриптов. Не главная оболочка.

См. Обсуждение в Twitter здесь: https://twitter.com/housecor/status/962347301456015360

1
ответ дан vnglst 19 August 2018 в 00:32
поделиться
  • 1
    Я не согласен, это потенциально может скрыть проблему и будет отключать другую версию узла, если она не установлена. – Brendan Hannemann 14 March 2018 в 18:44
  • 2
    -1, потому что это ужасная (действительно страшная) идея. Это как сказать, что если вы безработный, вы должны сначала финансировать компанию, и вы можете начать там работать. – ozanmuyes 4 April 2018 в 17:46
  • 3
    ^^ очень любопытная метафора – user2954463 16 May 2018 в 22:23
  • 4
    Для меня это отличная идея. Отдельные версии узлов для отдельных проектов. Можно безопасно обновить его, не обновляя другие. Только catch должен запускаться в .bin ./node node-sass, а не только node-sass. Не уверен, что он одинаковый для всех .bin-файлов. – Jon 10 August 2018 в 05:56
Другие вопросы по тегам:

Похожие вопросы: