【发布时间】:2021-11-30 11:46:39
【问题描述】:
您好,在尝试理解typescript 和typescript compiler 时,我尝试了一个小网络项目。
工作流程很简单。 typescript compiler 监视 src/js 文件夹并将每个 *.tsfile 编译到我的 dev_static/js 文件夹中作为 *.jsfile 并复制文件夹结构。
如有必要,我的django dev server 会从那里获取*.js文件。例如page_1.html 需要脚本 <script type="module" src="{% static 'js/pages/page_1.js' %}"> </script>。
src/
js/
pages/page_1.ts
pages/page_2.ts
navbar/navbar.ts
modules/some_modul.ts
dev_static/
js/
pages/page_1.js
pages/page_2.js
navbar/navbar.js
modules/some_modul.js
.tsconfig
{
"compilerOptions": {
"outDir": "../dev_static/js",
"removeComments": true,
"target": "ES6",
"lib": [
"es6",
"dom",
"es2015.promise"
],
"allowJs": true,
"checkJs": true,
"moduleResolution": "node",
"baseUrl": ".",
"paths": {
"~*": ["./*"],
"@node/*": ["./node_modules/*"]
},
},
// Input Dir
"include": ["src/**/*"],
"exclude": ["node_modules", "**/*.spec.ts"]
}
问题
将模块导入为 ES6 可以正常工作。但是我正在努力在我的打字稿项目中声明像 Axios 这样的第 3 方库。例如使用 axios 的类型和智能感知,我将 Axios 作为节点模块导入,如下所示:
axios_fetch.ts
import axios from '@node/axios';
import { graphUrl } from '../env/env.js';
编译器输出:
axios_fetch.js
import axios from '@node/axios';
import { graphUrl } from '../env/env.js';
当然浏览器不知道如何解决这个问题:import axios from '@node/axios';。
2127.0.0.1/:1 Uncaught TypeError: Failed to resolve module specifier "@node/axios". Relative references must start with either "/", "./", or "../".
此外,我在我的开发服务器中加载了axios min.version(或其他第 3 方库)全局。它嵌入在一个基础模板中,其他所有页面都基于该模板,并且默认情况下每个页面都包含<script type="module" src="{% static 'js/3rdParty/axios/axios.min.js' %}"> </script>。
dev_static/
js/
pages/page_1.js
<...>
3rdParty/axios/axios.min.js
问题
如何告诉编译器不要编译我的打字稿文件中的import axios from '@node/axios'; 行?因为 Axios 库将在我的所有页面(模板)中作为缩小版本提供或加载全局。我只需要这一行,这样打字稿就不会抱怨并且有可用的类型。
我需要的是 typescript compiler 在编译时不处理 axios 的“导入”行。或者换句话说,我只需要在 dev-compile-time 中导入该节点以进行类型检查、接口等,而不是在完成的 javascript 文件或运行时中。
axios_fetch.ts
import axios from '@node/axios';// do not compile this. "axios" will be global available
import { graphUrl } from '../env/env.js';
如果我在axios_fetch.js 中手动删除import axios from '@node/axios';,它会起作用。
【问题讨论】:
标签: javascript typescript ecmascript-6 axios typescript-compiler-api