2013-12-24 4 views
0

Недавно я начал использовать Yeoman для создания статических проектов сайта, построенных с Jekyll. yo jekyllrb работает нормально, но, с точки зрения безопасности, я обеспокоен той части, которая приходит после того, как он печатает:Почему Йомену требуется подключение к Интернету при запуске нового проекта?

I'm all done. Running bower install & npm install for you to install the required dependencies. If this fails, try running the command yourself.

Если я не подключен к Интернету bower install все еще работает хорошо, но npm install дает следующее сообщение об ошибке:

 
npm ERR! git fetch -a origin (git://github.com/gruntjs/grunt-contrib-watch.git) fatal: unable to connect to github.com: 
npm ERR! git fetch -a origin (git://github.com/gruntjs/grunt-contrib-watch.git) github.com: Name or service not known 
npm ERR! git fetch -a origin (git://github.com/dannygarcia/grunt-jekyll.git) fatal: unable to connect to github.com: 
npm ERR! git fetch -a origin (git://github.com/dannygarcia/grunt-jekyll.git) github.com: Name or service not known 

Из того, что я понял, прочитав, что говорит о in response to this questionsudo, npm и chroot, работающий под npm install потенциально экс ecutes из Интернета и поэтому рекомендуется префикс такой команды sudo, чтобы разрешить npm привилегии понижения. Выполнение npm config set unsafe-perm=false должно заставить следовать этой рекомендации. Это, однако, не влияет на npm install, я думаю, потому что это локальная установка. Это имеет смысл для меня с тех пор (особенно в dev. Env.) Код, который установлен локально, скорее всего, должен выполняться собственным пользователем. Что для меня не имеет смысла, так это то, что в случае с Йоменом код должен быть извлечен из Интернета и исполнен с той же частотой, что и я начинаю новый (простой) проект, тем более, что npm не проверяет подписи. Я полагаю, что решением для этого было бы отключить npm для моего пользователя и скопировать два проверенных файла node_modules из другого подобного проекта. В случае проектов с более разнообразными потребностями я бы рассмотрел использование песочницы (возможно, с chroot).

Каков стандартный способ решения этой проблемы? Предоставляет ли Yeoman какие-либо варианты, позволяющие обойти эту проблему?

ответ

1

Я думаю, что Bower немного умнее об обработке пакетов, чем npm, в большинстве случаев он будет использовать кэшированную копию плагина, поэтому, если у вас установлена ​​версия jQuery X в одном проекте, а затем используйте ту же самую версию в другой, тогда Bower не нужно подключаться к Интернету, чтобы разрешить эту зависимость, он просто вытащит из кэша. При этом вам все равно придется загружать этот пакет в первую очередь, чтобы иметь эту кешированную копию.

На практике sudo, я с тех пор узнал, что вы не должны использовать sudo с менеджерами пакетов. Просто буду цитировать этот ответ здесь: "sudo npm install -g grunt-cli" gives me an error

According to the maintainer of npm, installing packages with sudo is considered bad practice because you are allowing that package to have complete control of your system and you can't and SHOULDN'T trust these packages with root access. Think Debian's long release cycles as an extreme example of protecting end users from community maintained packages for this exact reason.

http://howtonode.org/introduction-to-npm

You should do what Issaacs suggests and chown your /usr/local folder so you have RW permissions.

Так что вопрос вы испытываете то, что вы не хотите, чтобы вести дела с sudo. Так не надо. Но если npm install выдает сообщение об ошибке, возможно, вам понадобится chown -R /usr/local или другая проблема. В случае модулей узлов они устанавливаются за проект, если вы не установите их глобально с флагом -g, и даже тогда вы можете иметь несколько проектов с различными версиями пакетов.

Если у вас уже есть проект, который использует версию Y grunt, yeoman и т. Д., Вы можете просто скопировать через соответствующие модули из другого проекта. Это все равно будет работать.Однако это намного проще сделать npm install <package, ...> --save или --save-dev упорствовать эти зависимости в файле package.json, что делает клонирование проекта на другую машину намного проще (git clone <project> && npm i)

TLDR: Оба Бауэр и НАЯ установка пакетов из Интернет, будь то под управлением Йомена или нет; Bower отличается тем, что иногда он может использовать кеш.

+0

Спасибо. Тем не менее, это то, что последний README говорит о sudo «Начиная с версии 0.3, рекомендуется запускать npm с правами root. Это позволяет npm изменять идентификатор пользователя для пользователя никого до запуска каких-либо команд сборки или тестирования пакетов». https://github.com/isaacs/npm/tree/master. Проблема, с которой я сталкиваюсь, заключается в том, что npm говорит мне не доверять слишком много, что я загружаю с помощью npm, но Yeoman хочет, чтобы я доверял тому, что я загружаю каждый раз, когда начинаю новый проект (даже самый простой). Может быть, это do wth http://stackoverflow.com/questions/15020529/why-is-yeoman-not-recommended-for-building-websites – primroot

+1

Получаю это. Если вам не удобно использовать что-то, что устанавливает зависимости, о которых вы не знаете, вы можете попробовать написать собственный генератор, ИЛИ проверить источник используемого генератора. По сути, генератор Yeoman просто копирует файлы в ваш проект на основе некоторых переменных, которые вы им даете, что экономит вам копию вручную из других проектов. Вы можете увидеть отпечатки jekyll в этом файле: https://github.com/Thomas-Lebeau/generator-jekyll/blob/master/app/templates/_package.json и, конечно же, вы можете вручную проверить созданную 'package.json 'перед выполнением' npm install'. – Ben

Смежные вопросы