typescript - 如何使用 ts-node 运行安装在 node_modules 中的 ts 脚本
问题描述
我有一个包含script.ts
文件的包:
import path from 'path'
/* ... */
const loaded = require(path.resolve(process.cwd(), './src/dynamicPath/example.ts'))
// package.json
{
"name": "mypackage",
"bin": {
"script": "./script.ts"
}
}
它从安装到的存储库中加载打字稿文件。所以我不能编译是和使用节点,我需要使用ts-node
如果我运行ts-node script.ts
,它工作正常。
但是当它安装在./node-modules/.bin/script.ts
. 如果我运行ts-node ./node-modules/.bin/scripts
它不起作用:
(node:25931) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
xxx/node_modules/.bin/script.ts:1
import path from 'path'
^^^^^^
SyntaxError: Cannot use import statement outside a module
at wrapSafe (internal/modules/cjs/loader.js:915:16)
...
如果我添加's那么我type: module
有这个错误:mypackage
package.json
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /__/node_modules/mypackage/script.ts
at Loader.defaultGetFormat [as _getFormat] (internal/modules/esm/get_format.js:65:15)
at Loader.getFormat (internal/modules/esm/loader.js:116:42)
at Loader.getModuleJob (internal/modules/esm/loader.js:247:31)
at async Loader.import (internal/modules/esm/loader.js:181:17)
at async Object.loadESM (internal/process/esm_loader.js:68:5) {
code: 'ERR_UNKNOWN_FILE_EXTENSION'
}
我怎样才能使打字稿脚本与node_modules
外面的一样node_modules
?
我安装tsconfig.json
的回购协议mypackage
:
{
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": true,
"target": "es6",
"lib": ["es2017"],
"moduleResolution": "node",
"outDir": "dist",
"types": ["node"],
"sourceMap": true
},
"include": ["src/**/*", "./node_modules/.bin/script", "./node_modules/mypackage/**"]
}
我试图避免使用postinstall
npm 脚本将文件复制到我的源代码中。
解决方案
确保您
"esModuleInterop": true
在两个tsconfigs中都有- 在mypackage和要安装mypackage的依赖项目中。添加
#!ts-node
在script.ts文件之上无需这样
ts-node ./node-modules/.bin/script
做(在您安装mypackage的依赖项目npx script
的目录中)
推荐阅读
- javascript - 地图
没有被映射 - php - CakePHP 3 修改控制器中请求数据的正确方法
- postgresql - 使用许多常见的子表达式进行更新
- postgresql - 如何正确设置逻辑 postgresql 复制(两种方式)?
- java - 如何使用 RecyclerView 在编辑模式下显示选中的项目?
- apache - 在 odoo 中使用 apache2 和 wsgi 为单个域设置 ssl,但服务器有多个域
- javascript - 为什么我不能从模块外部引用属性集?
- python - 日历算法
- templates - openshift编写模板根据条件创建路线
- jquery - 我如何覆盖 jquery show() 事件?