如何在TypeScript中创建本地模块

时间:2018-12-11 01:50:31

标签: javascript node.js typescript node-modules

我在文件夹src/modules/my-module/中创建了文件夹package.json,并定义了导出我们需要的所有内容的主文件。

我现在可以从中导入import {A} from '../../modules/my-module'

我想将语法更改为import {A} from 'my-module',我有一些理由:

  • 将模块移到另一个文件夹时,我不想更改所有调用此模块的代码。
  • 稍后,我希望可以将模块作为npm软件包移至单独的存储库,并在多个项目中重复使用。我不想以后更改所有调用代码。

我设法通过添加到tsconfig.json

来对其进行编译
"paths": {
  "my-module": ["src/modules/my-module"]
}

但是我无法通过node.js运行结果,因为节点找不到模块。在这种情况下,有什么方法可以使用非实时模块引用。

4 个答案:

答案 0 :(得分:1)

在将ts文件转换为js时,TS不会转换该“ my-module”。

使用module-alias软件包可能会解决您的问题。

将以下配置添加到package.json中:

"_moduleAliases": {
   "my-module": "<your_build_folder>/modules/my-module"
},

此代码位于主文件(server.ts / index.ts)的第一行

import 'module-alias/register';

答案 1 :(得分:1)

将本地模块作为依赖项添加到 package.json(在项目的根目录中):

  "dependencies": {
    "my-module": "file:src/modules/my-module",
    ...
  }

像这里一样配置你的打字稿设置@tsconfig/recommended

在根文件夹中运行 npm install my-module

然后你可以这样做:

import {A} from 'my-module'

答案 2 :(得分:0)

从 2018 年 7 月的 Typescript 3 开始,您可以转译您的外部本地项目(参考项目)。

见:How to share code between TypeScript projects?

答案 3 :(得分:0)

听起来,您想要做的是打包您的本地 my-module 以便可以像安装和使用 npm 中的软件包一样使用它注册表

当您进行本地开发时,很容易将依赖项配置为将您的模块引用为文件路径 - 尽管您需要将打字稿转换为适合您的情况。

这是我用于本地开发的方法,在我们有许多用于微服务架构的实用程序模块的环境中。我将模块打包成一个归档文件并使用 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

或者作为一体机(在 tgz 目录中构建 my-app):

/my-app/> && npm pack ../my-module && npm i -s my-module-0.0.1.tgz

完成开发后,您可能希望以一种在部署时可用于您的项目的方式发布模块。

您的选择如下:

  • 使用 npm link
  • 发布到您的本地系统
  • 发布到私有注册表
  • 发布到 npm 注册表(作为公共或私有模块)

以下是这些选项的好资源:https://medium.com/@debshish.pal/publish-a-npm-package-locally-for-testing-9a00015eb9fd