gpt4 book ai didi

javascript - npm link 会导致找不到模块的问题吗?

转载 作者:行者123 更新时间:2023-12-01 01:23:49 24 4
gpt4 key购买 nike

我正在尝试学习如何从纯 JavaScript 项目中使用 TypeScript 模块的概念,在我看来,我只能使用 npm 链接的模块,但不能使用 npm 链接的模块链接到其他人。让我用一个例子来解释一下:

$ cat index1.js 
const { add, multiply, divide } = require('module-a')

const newfunc = (a, b) =>
divide(multiply(add(a, b), 6), 2);

const result = newfunc(1, 2)
console.log(result);

$ node index1.js
9

module-a 是一个 TypeScript 模块,我从我的 JavaScript 项目中通过 npm 链接到该模块。而且效果很好。现在:

$ diff -wU 1 index1.js index2.js
--- index1.js 2019-01-01 16:25:50.000000000 -0500
+++ index2.js 2019-01-01 16:37:33.000000000 -0500
@@ -1,2 +1,3 @@
const { add, multiply, divide } = require('module-a')
+const { myfunc } = require('module-b')

@@ -7 +8,3 @@
console.log(result);
+
+console.log(myfunc(1, 2));

$ node index2.js
internal/modules/cjs/loader.js:605
throw err;
^

Error: Cannot find module 'module-b'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:603:15)
at Function.Module._load (internal/modules/cjs/loader.js:529:25)
at Module.require (internal/modules/cjs/loader.js:657:17)
at require (internal/modules/cjs/helpers.js:22:18)
...

$ ls -l node_modules/
total 0
lrwxrwxrwx 1 tong tong 30 2019-01-01 16:17 module-a -> /usr/lib/node_modules/module-a
lrwxrwxrwx 1 tong tong 30 2019-01-01 16:28 module-b -> /usr/lib/node_modules/module-b

$ ls -l /usr/lib/node_modules/module-b
lrwxrwxrwx 1 root root 83 2019-01-01 16:32 /usr/lib/node_modules/module-b -> /paths/to/ts-modules-test/module-b

也就是说,对我来说,module-b 看起来与 module-a 没有什么不同。但为什么 require('module-a') 可以,但 require('module-b') 不行呢?

真的是因为我的 module-b npm 链接到了 module-a 吗?

module-bmodule-a 的整个 npm 链接设置以及所有代码都可以在 this repo 找到。 。

更新。我没有 module-amodule-b 的项目 package.json,但为什么 module-a 可以工作?此外,创建了 module-c/package.json 后,问题仍然存在:

$ find . 
.
./node_modules
./node_modules/module-a
./node_modules/module-b
./index1.js
./index2.js

$ npm init --force --yes
Wrote to /paths/to/ts-modules-test/module-c/package.json:

{
"name": "module-c",
"version": "1.0.0",
"description": "",
"main": "index1.js",
"dependencies": {
"module-a": "^1.0.0",
"module-b": "^1.0.0"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}

$ node index2.js
internal/modules/cjs/loader.js:605
throw err;
^

Error: Cannot find module 'module-b'

最佳答案

当nodejs需要一个文件夹时,它会尝试寻找一个主文件。

默认情况下,主文件是index.js。由于您使用的是 TypeScript,因此没有 index.js,而是有 index.ts

要定义主文件,您需要在package.json中定义它。我可以看到你已经在module-a中这样做了。

{
"main": "build/index.js"
}

这意味着在安装过程中的某个时刻,您已将 ts 编译为 js,并且编译器的输出被放置在文件夹 build 中。

查看module-b,该模块的编译器也指向build文件夹,但package.json“main”属性的值为“index.js”。我假设,如果您像在 module-a 中那样将其指向 build/index.js ,它就会起作用。

关于javascript - npm link 会导致找不到模块的问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53999308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com