Typescript/ES6:使用绝对路径导入src文件
在我的一个文件中,我导入了另一个commonjs模块Typescript/ES6:使用绝对路径导入src文件,typescript,Typescript,在我的一个文件中,我导入了另一个commonjs模块 import * as at from '../../../at-angular' 我宁愿这样做 import * as at from 'fv/at-angular' 将fv作为我的src目录。因此,我的应用程序文件夹结构如下所示: - src - at-angular.ts - core - services .... 我能否以某种方式使typescript使fv指向src?typescript 1.8(尚未发布
import * as at from '../../../at-angular'
我宁愿这样做
import * as at from 'fv/at-angular'
将fv
作为我的src
目录。因此,我的应用程序文件夹结构如下所示:
- src
- at-angular.ts
- core
- services
....
我能否以某种方式使typescript使fv
指向src
?typescript 1.8(尚未发布)将具有路径映射功能:
路径映射
有时模块不直接位于baseUrl下。它是
可以控制在这种情况下如何使用
路径映射。使用以下JSON指定路径映射
结构:
{
"paths": {
"pattern-1": "substitution" | ["list of substitutions"],
"pattern-2": "substitution" | ["list of substitutions"],
...
"pattern-N": "substitution" | ["list of substitutions"]
}
}
模式和替换是可以有零或一的字符串
星号('*')。模式和替代的解释
将在解决过程一节中描述
这可能正是您想要的。我能够在我的webpack2设置中获得绝对路径导入。这里是我做的,您必须设置tsconfig.json来支持它。以下是一个例子: 这是我帖子中的例子 网页2解析
/**
* Assuming the following project structure
* /src
* /app
* /services
* /models
* /node_modules
* .webpack.config.js
* tsconfig.json
*/
var path = require('path');
module.exports = {
module: { ... },
devtool: '...',
resolve: {
modules: [
path.resolve('./node_modules'),
path.resolve('./app')
]
}
通过定义resolve.modules,我们指示Webpack使用这些路径作为根文件夹搜索(也称为resolve)组件。
类型脚本配置
好了,现在这个网页很好用了;打字脚本呢。如果您使用的是Atom或VSCode等编辑器,则可能会看到一个突出显示的错误,表示TypeScript找不到模块。
这是因为TypeScript不知道此根模块设置。我们还必须在tsconfig.json中提供此信息
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"*": [
"*",
"app/*"
]
}
}
通过定义paths对象和baseUrl,我们指示TypeScript编译器在解析导入语句时查看应用程序文件夹。
希望这个简单的例子能够帮助那些在开始使用TypeScript和Webpack2时遇到此配置问题的人解除锁定。我已经为源代码创建了一个要点,让它们使用绝对路径名或tsconfig.json中定义的任何其他路径 它适用于Browserify+Watchify+Tsify,也适用于Gulp typescript 它将tsconfig.json中定义的路径名和baseUrl转换为它们的相对路径名。
享受吧 这是我的设置,可以正常工作。只需构建,当您想使用node在dist目录中运行代码时,必须传递node\u PATH=dist 将此脚本添加到package.json脚本中,并运行它以测试一切正常
"build-test": "NODE_PATH=dist node --inspect dist"
其可能的副本不是副本。我很确定他的意思是他想用绝对路径捆绑文件。你能在你的答案中包括这个例子吗。链接可能会随着时间的推移而消失,这意味着其他堆栈用户无法从这个Q&ASure@Todd中受益,我的示例补充道。感谢您将其包括在内,但您的答案不起作用,因为这只适用于编译器理解模块的位置。但是在传输之后,路径没有更新,这会在任何应用程序节点或网页中导致错误。@azarus:也许我应该删除这篇文章,我现在不太关注TypeScript。我不知道解决这个问题的正确方法是什么。遗憾的是,没有正确的方法,只能在tsc中以ESnext为目标,然后使用babel转换模块。我已经发布了一个答案,根据tsconfig.json路径映射将模块名称转换到其正确的位置。