Windows 上无法使用 npm link?

9

我正在使用 node v0.10.32。Windows 8.1。

我的目标是将一个 node 应用程序作为 node_module 链接到另一个主应用程序中。

我进入 my-module 文件夹,执行以下操作:

npm link

然后,我进入主应用程序文件夹并执行以下操作:

npm link my-module

这是结果

c:\dev\main-app>npm link my-module
unbuild my-module@0.0.2
c:\dev\main-app\node_modules\my-module ->     C:\Users\Nizar\AppData\Roaming\npm\node_modules\my-module -> C:\dev\my-module

但是,这个链接似乎不起作用,require('my-module') 抛出以下错误

    c:\dev\main-app>node app.js

    module.js:340
        throw err;
              ^
    Error: Cannot find module 'my-module'
        at Function.Module._resolveFilename (module.js:338:15)
  • my-module的版本确实是v0.0.2。
  • 我可以从main-app/node_module/my-module访问它。
  • 此文件夹存在于C:\Users\Nizar\AppData\Roaming\npm\node_modules\my-module。
  • my-module的package.json中有"name": "my-module"。

此外,%NODE_PATH%已正确设置:

  c:\dev\main-app>echo %NODE_PATH%
  C:\Users\Nizar\AppData\Roaming\npm\node_modules

想法?

当您发出 dir node_modules 命令时,是否会看到类似于 01/12/2016 09:21 PM <JUNCTION> my-module [C:\Users\Nizar\AppData\Roaming\npm\node_modules\my-module] 的内容?如果没有,那么链接可能存在问题。 - rossipedia
哦,是的!01/15/2016 11:02 AM <JUNCTION> my-module [C:\Users\Nizar\AppData\Roaming\npm\node_modules\my-module] - Nizar Blond
很奇怪,我仍然可以使用cd访问它。有什么想法吗? - Nizar Blond
1
如果你运行cd node_modules\my-module命令,你会进入你的模块文件夹,对吗?这个文件夹里面应该有一个index.js文件或者其他你在package.json文件中指定的main键所对应的文件。 - rossipedia
当我改变了index.js文件时,它起作用了!谢谢,随意写下答案,这样我就可以标记它为V :) - Nizar Blond
显示剩余2条评论
1个回答

10

有几件事情可以尝试。在Windows上,npm link 的处理方式是创建连接点。执行 dir node_modules 命令应该会得到类似以下的一行:

01/15/2016 11:02 AM <JUNCTION> my-module [C:\Users\Nizar\AppData\Roaming\npm\node_modules\my-module]

假设这些都存在,那么问题很可能是:

  1. 缺少一个 index.js 文件(Node使用默认的文件名来解析模块)。
  2. 你正在使用与 index.js 不同的文件作为模块的主文件,在这种情况下,你需要在 package.json 文件中使用 main 键告诉 Node 那个文件是主文件。

例如(从 此处 获取):

{
  "name": "node-js-sample",
  "version": "0.2.0",
  "description": "A sample Node.js app using Express 4",
  "main": "index.js", // <-- LIKE THIS
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "express": "^4.13.3"
  },
  "engines": {
    "node": "4.0.0"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/heroku/node-js-sample"
  },
  "keywords": [
    "node",
    "heroku",
    "express"
  ],
  "author": "Mark Pundsack",
  "contributors": [
    "Zeke Sikelianos <zeke@sikelianos.com> (http://zeke.sikelianos.com)"
  ],
  "license": "MIT"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接