【发布时间】:2019-01-01 22:06:28
【问题描述】:
我正在尝试从纯 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 是我从我的 JavaScript 项目中 npm 链接到的 TypeScript 模块。它工作正常。现在:
$ 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-b 到module-a 的整个npm 链接设置,以及所有代码,都可以在this repo 找到。
更新。我没有 module-a 或 module-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'
【问题讨论】:
-
Module-b 需要在项目的 package.json 中。请分享文件内容。
-
module-a和module-b都有文件index.js? -
no..
module-b定义不正确。请在package.json中查看module-b与module-a的“main”。 module-a 正确定义了它build/index.js而 module-b 没有。
标签: javascript node.js typescript npm