Как изменить порт Tomcat из плагина Eclipse Tomcat

Я знаю, что это старый вопрос, но я столкнулся с этим при попытке выполнить некоторую проверку версий с помощью semver в скрипте preinstall в package.json. Поскольку я знал, что не могу зависеть от каких-либо локальных модулей, я использовал это, чтобы потребовать semver из глобальной папки node_modules (поскольку npm зависит от этого, я знаю, что он есть):

function requireGlobal(packageName) {
  var childProcess = require('child_process');
  var path = require('path');
  var fs = require('fs');

  var globalNodeModules = childProcess.execSync('npm root -g').toString().trim();
  var packageDir = path.join(globalNodeModules, packageName);
  if (!fs.existsSync(packageDir))
    packageDir = path.join(globalNodeModules, 'npm/node_modules', packageName); //find package required by old npm

  if (!fs.existsSync(packageDir))
    throw new Error('Cannot find global module \'' + packageName + '\'');

  var packageMeta = JSON.parse(fs.readFileSync(path.join(packageDir, 'package.json')).toString());
  var main = path.join(packageDir, packageMeta.main);

  return require(main);
}

Мне нравится этот подход, потому что для этого не требуется установка каких-либо специальных модулей.

Я не пошел с решением NODE_PATH, как это предлагали другие, поскольку я хотел чтобы это работало на чьей-то машине, без необходимости требовать дополнительной настройки / настройки перед запуском npm install для моего проекта.

Как это закодировано, гарантируется только найти модули верхнего уровня (установлены используя npm install -g ...) или модули, требуемые npm (перечислены как dependencies здесь: https://github.com/npm/npm/blob/master/package.json ). Если вы используете более новую версию NPM, она может найти зависимости от других пакетов, установленных на глобальном уровне, так как теперь существует более плотная структура для папок node_modules.

Надеюсь, это кому-то полезно.

13
задан Daud 4 September 2013 в 13:58
поделиться