模块`require`基本路径

时间:2018-04-17 18:06:37

标签: javascript node.js npm

我正在使用Typescript。我的来源是src。在转换时,Typescript将其结果输出到lib文件夹。因此,当需要我的包组件时,我必须写下以下内容:

import { myModuleMain } from 'mylib/lib'
import { ComponentA }   from 'mylib/lib/ComponentA'
import { ComponentB }   from 'mylib/lib/ComponentB'

好的,当它只发生一次时,它没关系。问题是当需要这些组件中的几个或许多时。到处都有几十个/lib路径段,我试图摆脱它,只需执行以下操作:

import { myModuleMain } from 'mylib'
import { ComponentA }   from 'mylib/ComponentA'
import { ComponentB }   from 'mylib/ComponentB'

我应该找到一种方法来定义我的lib的基本路径。但据我所知,我必须在我的lib代码中更改require的搜索路径。有没有办法在不改变搜索路径的情况下实现相同的行为?例如,通过package.json属性?

我自愿省略在单个main入口点导出所有组件的选项,因为最终用户不应该使用除main之外的文件:只有插件可以使用他们。换句话说,我希望在lib文件夹中包含多个入口点。使用main中的package.json属性只会简化第一个模块的import语句,例如 myModuleMain

2 个答案:

答案 0 :(得分:0)

我在库配置(package.json)上使用main

{
    "name": "mylib",
    "description": "My library...",
    "version": "1.0.0",
    "main": "./lib/index.js",
    ......
}

来自documentation

  

主要字段是模块ID,它是您的主要入口点   程序。也就是说,如果您的包名为foo,并且用户安装   它,然后确实需要(“foo”),然后你的主模块的出口   对象将被退回。

     

这应该是相对于包的根目录的模块ID   文件夹中。

     

对于大多数模块而言,最有意义的是拥有一个主脚本和   通常不多。

另外,在ts.config上我有这个配置:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "outDir": "./lib",    
    "rootDir": "./src",
    "moduleResolution": "node",
    ....
  }
}

答案 1 :(得分:0)

  

因此,当需要我的包组件时,我必须编写以下内容:

嗯,你可以import the files themselves.你不必要求转换版本。

# foo.ts
export default function f (): void {
  console.log('foo')
}

现在你有app.ts

import f from './foo';
f();

你应该完全忽略已转换的输出。