最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Is installing NodeJS packages locally equivalent to Python's virtualenv? - Stack Overflow

programmeradmin1浏览0评论

I've been using Python for a while and I've learned we should always use a virtual env for each project where we pip install <name> the packages as needed, etc

I'm new to JS but would downloading packages using npm install <name> without the -g option mean it will only download it in the specific project directory, similarly to how Python's virtual env is keeping the pip packages separate? or is there also some sort of virtual env that needs to be created?

Sorry if I'm misunderstanding anything here... just want to make sure that installing packages using npm install isn't going to mess w/ anything globally or something!

I've been using Python for a while and I've learned we should always use a virtual env for each project where we pip install <name> the packages as needed, etc

I'm new to JS but would downloading packages using npm install <name> without the -g option mean it will only download it in the specific project directory, similarly to how Python's virtual env is keeping the pip packages separate? or is there also some sort of virtual env that needs to be created?

Sorry if I'm misunderstanding anything here... just want to make sure that installing packages using npm install isn't going to mess w/ anything globally or something!

Share Improve this question asked Nov 13, 2017 at 20:26 xlalalandxxlalalandx 1331 gold badge5 silver badges11 bronze badges 3
  • 1 Without the -g flag it's project specific – Sterling Archer Commented Nov 13, 2017 at 20:27
  • 1 Virtualenv also handles the python executables, so it's like using npm and nvm together. – david25272 Commented Nov 13, 2017 at 21:19
  • Thanks everyone! What exactly are python executables and nvm? – xlalalandx Commented Nov 13, 2017 at 22:01
Add a ment  | 

2 Answers 2

Reset to default 7

Node installs

  • local: npm install <pkg>
  • global: npm install -g <pkg>

Python installs

  • local: . <envName>/bin/activate then pip install <pkg>
  • global: pip install <pkg>

Node usage

  • local: npm start (w/ path to binary specified in package.json e.g. "start":"./node_modules/.bin/<pkg>")
  • global: <pkg> <cmd>

Python usage

  • local: . <envName>/bin/activate then <pkg> <cmd>
  • global: <pkg> <cmd>

main takeaway: once you activate virtualenv you don't have to worry about package mands slipping into global scope


NVM: way to specifiy Node version using .nvmrc file in project root

Correct, installing packages via npm install <package> installs them only for the specific project, by default in a folder node_modules in the project root.

npm install --global <package> installs a package globally.


See the npm docs for more info.

发布评论

评论列表(0)

  1. 暂无评论
ok 不同模板 switch ($forum['model']) { /*case '0': include _include(APP_PATH . 'view/htm/read.htm'); break;*/ default: include _include(theme_load('read', $fid)); break; } } break; case '10': // 主题外链 / thread external link http_location(htmlspecialchars_decode(trim($thread['description']))); break; case '11': // 单页 / single page $attachlist = array(); $imagelist = array(); $thread['filelist'] = array(); $threadlist = NULL; $thread['files'] > 0 and list($attachlist, $imagelist, $thread['filelist']) = well_attach_find_by_tid($tid); $data = data_read_cache($tid); empty($data) and message(-1, lang('data_malformation')); $tidlist = $forum['threads'] ? page_find_by_fid($fid, $page, $pagesize) : NULL; if ($tidlist) { $tidarr = arrlist_values($tidlist, 'tid'); $threadlist = well_thread_find($tidarr, $pagesize); // 按之前tidlist排序 $threadlist = array2_sort_key($threadlist, $tidlist, 'tid'); } $allowpost = forum_access_user($fid, $gid, 'allowpost'); $allowupdate = forum_access_mod($fid, $gid, 'allowupdate'); $allowdelete = forum_access_mod($fid, $gid, 'allowdelete'); $access = array('allowpost' => $allowpost, 'allowupdate' => $allowupdate, 'allowdelete' => $allowdelete); $header['title'] = $thread['subject']; $header['mobile_link'] = $thread['url']; $header['keywords'] = $thread['keyword'] ? $thread['keyword'] : $thread['subject']; $header['description'] = $thread['description'] ? $thread['description'] : $thread['brief']; $_SESSION['fid'] = $fid; if ($ajax) { empty($conf['api_on']) and message(0, lang('closed')); $apilist['header'] = $header; $apilist['extra'] = $extra; $apilist['access'] = $access; $apilist['thread'] = well_thread_safe_info($thread); $apilist['thread_data'] = $data; $apilist['forum'] = $forum; $apilist['imagelist'] = $imagelist; $apilist['filelist'] = $thread['filelist']; $apilist['threadlist'] = $threadlist; message(0, $apilist); } else { include _include(theme_load('single_page', $fid)); } break; default: message(-1, lang('data_malformation')); break; } ?>