xpt*_*xpt 1 javascript node.js npm typescript
我正在尝试从普通 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
Run Code Online (Sandbox Code Playgroud)
这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
Run Code Online (Sandbox Code Playgroud)
即,对我来说module-b看起来没有什么不同module-a。但为什么可以require('module-a')但不可以require('module-b')?
真的是因为我的module-bnpm 链接到了module-a吗?
从module-bto的整个 npm 链接设置module-a以及所有代码都可以在这个 repo 中找到。
更新。我没有项目的 package.jsonmodule-a或module-b,但为什么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'
Run Code Online (Sandbox Code Playgroud)
当 nodejs 需要一个文件夹时,它会尝试找到一个主文件。
默认情况下,主文件是index.js. 由于您使用的打字稿,你没有index.js,而是你有index.ts。
要定义主文件,您需要在package.json. 我可以看到你在module-a.
{
"main": "build/index.js"
}
Run Code Online (Sandbox Code Playgroud)
,在安装过程中,某些时候你必须编制的,这意味着ts要js和编译器的输出被放置在文件夹中build。
查看module-b,您的此模块的编译器也指向build文件夹,但package.json“main”属性的值为“index.js”。我认为,如果您build/index.js像在module-a其中那样指向它,它将起作用。
| 归档时间: |
|
| 查看次数: |
3494 次 |
| 最近记录: |