首页 文章

使用分发nodejs包(Ubuntu)将NPM安装到主目录中

提问于
浏览
79

我想使用分发Node.js包(或更新版本的chris-lea ppa),但是将NPM安装到我的主目录 .

这可能看起来很挑剔,但对于使用polyglot / github的开发人员来说,在Linux下设置语言运行时/库环境是一种非常惯用的方式:运行时的发行版包,每用户环境中的第三方库(参见virtualenv,RVM - RVM)如果你愿意,也会为你构建Ruby) . 如果有必要,我将在本地构建节点,但它是一个PITA,因为Node正成为许多项目的附带开发需求 .

第二个链接似乎可能适用于分发nodejs包,但它看起来很粗略 .

Update this paste总结了上面的第二个链接,但不适用于我(似乎npm忽略〜/ .npmrc,至少在安装期间) .

7 回答

  • 2

    NPM已经将本地软件包安装到您的项目中,但我仍然希望系统远离我的操作系统文件 . 以下是我建议划分Nodejs包的方法:

    通过chris-lea PPA安装Nodejs和NPM . 然后我在homedir中设置了一个包根,以保存Node“global”包:

    $ NPM_PACKAGES="$HOME/.npm-packages"
     $ mkdir -p "$NPM_PACKAGES"
    

    设置NPM以将此目录用于其全局程序包安装:

    $ echo "prefix = $NPM_PACKAGES" >> ~/.npmrc
    

    通过将以下内容添加到.zshrc / .bashrc,配置PATH和MANPATH以查看$ NPM_PACKAGES前缀中的命令:

    # NPM packages in homedir
    NPM_PACKAGES="$HOME/.npm-packages"
    
    # Tell our environment about user-installed node tools
    PATH="$NPM_PACKAGES/bin:$PATH"
    # Unset manpath so we can inherit from /etc/manpath via the `manpath` command
    unset MANPATH  # delete if you already modified MANPATH elsewhere in your configuration
    MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
    
    # Tell Node about these packages
    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    

    现在,当您执行 npm install -g 时,NPM会将库安装到 ~/.npm-packages/lib/node_modules 中,并将可执行工具链接到 ~/.npm-packages/bin ,这位于 PATH 中 .

    像往常一样使用 npm install -g

    [justjake@marathon:~] $ npm install -g coffee-script
    ... (npm downloads stuff) ...
    /home/justjake/.npm-packages/bin/coffee -> /home/justjake/.npm-packages/lib/node_modules/coffee-script/bin/coffee
    /home/justjake/.npm-packages/bin/cake -> /home/justjake/.npm-packages/lib/node_modules/coffee-script/bin/cake
    coffee-script@1.3.3 /home/justjake/.npm-packages/lib/node_modules/coffee-script
    
    [justjake@marathon:~] $ which coffee
    /home/justjake/.npm-packages/bin/coffee
    
  • -1

    Jake的答案发布于2012年,虽然很有用,但它引用了Chris Lea自2015年3月起不再更新的Node.js PPA .

    这是我用来在我的主目录中安装Node.js和npm的步骤:

    用nvm安装Node.js(不需要sudo):

    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
    source ~/.bashrc
    nvm install 7
    npm install -g npm  # update npm
    

    现在你可以 install -g 没有 sudo ,一切都进入 ~/.nvm/

    或者在没有nvm的情况下安装Node.js(官方说明):

    安装Node.js.

    • Node.js v6(截至2017年5月的当前LTS):
    curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
    sudo apt-get install -y nodejs
    
    • Node.js v7:
    curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
    sudo apt-get install -y nodejs
    

    将npm的默认目录更改为本地目录:

    mkdir ~/.npm-global
    npm config set prefix '~/.npm-global'
    export PATH="$HOME/.npm-global/bin:$PATH"  # ← put this line in .bashrc
    source ~/.bashrc  # if you only updated .bashrc
    

    或者,将 .npm-global 替换为您选择的目录 .

    更新npm并检查它是否已安装在$ HOME目录中:

    $ npm install npm -g
    /home/<username>/.npm-global/bin/npm -> /home/<username>/.npm-global/lib/node_modules/npm/bin/npm-cli.js
    /home/<username>/.npm-global/lib
    └─┬ npm@3.10.6 
      ├─┬ glob@7.0.5 
      │ └── minimatch@3.0.2 
      ├── npm-user-validate@0.1.5 
      └── rimraf@2.5.3
    

    现在你可以 install -g 没有 sudo 并且不会弄乱你的系统文件 .

  • 5

    Just Jake发布的解决方案很棒 . 但是,由于npm> 1.4.10的错误,它可能无法按预期工作 . (见thisthis

    虽然bug已经解决,但您可以按照以下步骤降级到npm 1.4.10:

    • 注释$ HOME / .npmrc中的前缀行

    • 运行 sudo npm install -g npm@1.4.10

    • 确保安装了正确版本的npm( npm --version

    • 取消注释$ HOME / .npmrc中的前缀行

    • 继续在您的主文件夹中安装全局包!

  • 3

    因为python已经很好 virtualenv ,我使用nodeenv . 与 nvm 相比,您可以为同一节点版本创建多个环境(例如,节点 0.10 的两个环境,但具有不同的包集) .

    ENVNAME=dev1
    
    #  create an environment
    python -m virtualenv ${ENVNAME}
    
    # switch to the newly created env
    source ${ENVNAME}/bin/activate
    
    # install nodeenv
    pip install nodeenv
    
    # install system's node into virtualenv
    nodeenv --node=system --python-virtualenv
    

    自述文件相当不错:https://github.com/ekalinin/nodeenv

  • 1

    我使用@ just-jake solution一段时间后发现nvm更容易设置 . 此外,它是功能强大的解决方案,允许安装和使用不同版本的 nodejs .

    在Ubuntu 14.04或16.04上:

    • 安装用于构建 nodejs 的必备软件包:
    sudo apt-get update
    sudo apt-get install build-essential libssl-dev
    
    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
    

    如果有更新版本的nvm,您可以在nvm网站上找到实际的安装命令 .

    • nvm 安装程序会将引导脚本添加到 ~/.bashrc ,因此您需要重新打开终端才能运行它,或者执行以下操作:
    source ~/.bashrc
    
    • 现在您可以安装任何您喜欢的 nodejs 版本,在它们之间切换等 .

    使用 nvm ls-remote 列出可用的 nodejs 版本 .

    例如,要安装 nodejs v4.2.4,请执行以下操作:

    # install v4.2.4
    nvm install v4.2.4 
    # use nodejs v4.2.4 in the current terminal session
    nvm use v4.2.4
    # use v4.2.4 by default in new terminal session
    nvm alias default v4.2.4
    
  • 183

    为了扩展Just Jake和user1533401提供的答案:我无法降级,因为我使用共享主机并且节点安装在系统目录中 . 这也是我更改npm安装全局脚本的目录的原因,如果我想要它那样做的话 . 对于那些在同一条船上的人,这是我找到的另一个临时修复工程:

    npm install -g --prefix=$(npm config get prefix) <package>

    问题是npm没有读取每个用户的配置文件,但是每次安装全局脚本时都指定它,修复了这个问题 . 找到here .

  • 21

    如前所述herehere

    npm config set prefix ~
    echo export PATH=\$PATH:\~/bin >> ~/.bashrc
    . ~/.bashrc
    

相关问题