首页 文章

使用npm安装本地模块?

提问于
浏览
290

我有一个下载的模块仓库,我想在本地安装,而不是全局安装在另一个目录中?

有什么简单的方法可以做到这一点?

4 回答

  • 385

    来自npm-link documentation

    在本地模块目录中:

    $ cd ./package-dir
    $ npm link
    

    在要使用该模块的项目目录中:

    $ cd ./project-dir
    $ npm link package-name
    

    或者一次性使用相对路径:

    $ cd ./project-dir
    $ npm link ../package-dir
    

    这相当于使用上面的两个命令 .

  • 292

    你只需要为npm install提供一个 <folder> 参数,参数应该是本地文件夹而不是包名:

    npm install /path
    
  • 0

    自从同一个人询问和回答后,我会添加npm link作为替代方案 .

    来自docs:

    这对于安装自己的东西非常方便,因此您可以对其进行处理并迭代测试,而无需不断重建 .

    cd ~/projects/node-bloggy  # go into the dir of your main project
    npm link ../node-redis     # link the dir of your dependency
    

    [编辑]从NPM 2.0开始,您可以在package.json中声明本地依赖项

    "dependencies": {
        "bar": "file:../foo/bar"
      }
    
  • 120

    如果本地模块具有您只想在项目范围内安装的对等依赖项,则这些方法( npm linkpackage.json 文件依赖项)都不起作用 .

    例如:

    /local/mymodule/package.json:
      "name": "mymodule",
      "peerDependencies":
      {
        "foo": "^2.5"
      }
    
    /dev/myproject/package.json:
      "dependencies":
      {
        "mymodule": "file:/local/mymodule",
        "foo": "^2.5"
      }
    

    在这种情况下,npm像这样设置 myprojectnode_modules/

    /dev/myproject/node_modules/
      foo/
      mymodule -> /local/mymodule
    

    当节点加载 mymodule 并且它确实 require('foo') 时,节点会解析 mymodule 符号链接,然后只查找 /local/mymodule/node_modules/ (及其祖先)的 foo ,它找不到它 . 相反,我们希望节点查看 /local/myproject/node_modules/ ,因为那是从哪里运行我们的项目,以及安装 foo 的位置 .

    因此,我们需要一种方法来告诉节点在查找 foo 时不解析此符号链接,或者我们需要一种方法告诉npm在 package.json 中使用文件依赖性语法时安装 mymodule 的副本 . 不幸的是,我还没有办法做到这一点:(

相关问题