[英]How to create a local module in TypeScript
我在文件夹src/modules/my-module/
中创建了package.json
并定义了导出我们需要的一切的主文件。
我现在可以从它import {A} from '../../modules/my-module'
我想将语法更改为import {A} from 'my-module'
我有几个原因:
我已经设法通过添加到tsconfig.json
来编译它
"paths": {
"my-module": ["src/modules/my-module"]
}
但是我无法通过 node.js 运行结果,因为节点找不到模块。 在这种情况下有没有办法使用非现实模块引用。
将 ts 文件转译为 js 时,TS 不会转换该“我的模块”。
使用module-alias包可能会解决您的问题。
将下面的配置添加到 package.json 中:
"_moduleAliases": {
"my-module": "<your_build_folder>/modules/my-module"
},
这段代码位于主文件的第一行 (server.ts/index.ts)
import 'module-alias/register';
听起来,你想要做的是打包你的本地my-module
,这样它就可以像你安装和使用来自 npm registry 的包一样使用。
当您进行本地开发时,很容易配置一个依赖项以将您的模块作为文件路径引用——尽管您需要转换您的打字稿才能使其在您的情况下工作。
这是我在本地开发中使用的方法,在我们有许多微服务架构实用程序模块的环境中。 我将模块打包到存档中并使用npm install
安装它:
npm pack
将模块打包成.tgz
。 我们的package.json
定义了要打包的目标目录, build
脚本执行到目标的转译(显然根据您的需要进行调整): ...
"main": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
"dist"
],
"scripts": {
"build": "npx babel src --out-dir dist --extensions .ts,.tsx,.js --ignore **/*.test.ts,**/*.test.tsx",
...
npm pack
并在您的应用程序中安装生成的包/my-module/> npm pack
/my-module/> cd ../my-app
/my-app/> npm install --save ../my-module/my-module-0.0.1.tgz
或者作为一个一体机(在my-app
目录中构建tgz
):
/my-app/> && npm pack ../my-module && npm i -s my-module-0.0.1.tgz
完成开发后,您可能希望以可用于部署项目的方式发布模块。
您的选择是:
npm link
发布到本地系统这是这些选项的一个很好的资源: https ://medium.com/@debshish.pal/publish-a-npm-package-locally-for-testing-9a00015eb9fd
从 2018 年 7 月的 Typescript 3 开始,您可以转译您的外部本地项目(参考项目)。
将本地模块作为依赖项添加到package.json (在项目的根目录中):
"dependencies": {
"my-module": "file:src/modules/my-module",
...
}
像这里@tsconfig/recommended配置你的打字稿设置
在您的根文件夹中运行npm install my-module
然后你可以这样做:
import {A} from 'my-module'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.