- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试将我的 TypeScript 项目转换为 JavaScript,但是,似乎有些不对劲。我将项目配置为通过 "module":"ES6"
解析为 ES6 模块(又名 ESM)设置,但不能解决问题。
tsconfig.json
配置如下: {
"compilerOptions": {
"module": "es6",
"target": "es6",
"lib": ["es6"],
"sourceMap": true,
}
}
我使用两个模块编写了一个简单的测试用例 senario。
第一个模块 — module1.ts
— 只导出一个常量,如下所示:
export const testText = "It works!";
第二个模块 — main.ts
— 只导入第一个模块的导出:
import { testText } from 'module1';
alert(testText);
第二个模块(或main.js)的输出文件嵌入到我的 index.html
文档,并且我已将类型属性添加为 type="module"
到 <script ...>
标签,如下图:
<script src="main.js" type="module"></script>
当我使用 Firefox(dom.moduleScripts.enabled
在 about:config 中设置)或 Chrome Canary(设置了实验性 Web 平台标志)时,它不会工作。
Typescript 编译器似乎转译了 TS import { testText } from 'module1';
-statement 到 JS 语句 import { testText } from 'module1';
. (注:两者完全一样)
正确的 ES6 导入语句应该是: import { testText } from 'module1.js';
(注意 .js 文件扩展名)如果我手动将文件扩展名添加到生成的代码中,它就可以工作。
是我做错了什么还是 Typescript "module": "es6"
做错了?设置不能正常工作?有没有一种方法可以将 .js 文件扩展名添加到生成的导入语句中来配置 tsc?
最佳答案
这是一个 confusing design choice in TypeScript .
在短期内,您可以通过指定输出文件来解决它:
在 main.ts
中指定 .js
扩展名和路径:
import { testText } from './module1.js';
alert(testText);
这将正确获取 module.ts
,但输出包含 .js
扩展名。
请注意,您还需要在本地文件前加上 ./
前缀,因为“裸”模块名称保留供将来使用。
关于javascript - 如何使用 TypeScript 编译器 (TSC) 解析 Node.js ES6 (ESM) 模块。 TSC 不发出正确的文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44979976/
第一年+ 我已经使用 esm 和 std/esm 包编写了我所有的代码,我能够无缝地使用 cjs 的依赖包,没有问题,而不需要 babel。 在 nodejs V14 中,混合的 esm/cjs 支持
我在 plunker 中有以下代码... // Thing.js export class Thing{ constructor(){ console.log("This thing is
我尝试使用 --experimental-modules 标志在 Node.js v8.7.0 中使用此语法导入 ESM 模块: import { check, validationResult }
所以我正在使用包 esm 和 module-alias,但似乎 esm 没有注册模块别名的路径。 这是我加载服务器文件的方式: nodemon -r esm ./src/index.js 8081 这
我想将 typescript react 应用程序作为组件捆绑到 ES 模块或 UMD 中。但是生成的 ES 包会产生一个无效的模块 js。 在 bundle 上它给了我这个提示。但我找不到任何解决方
我很好奇 ESM 的 tree-shaking/死代码消除是如何工作的。我在各种 Node.js 项目中使用 Typescript,并开始导出自己的 ESM 包 (tsc --module es201
我正在构建一个 webpack 应用程序,我有兴趣在整个应用程序中使用 ESM,这意味着使用 ESM 导入构建 webpack.config 文件。 我现在可以使用 Babel,但这是在 npm 添加
我想我已经阅读了 SO 上的每个线程以及互联网上的每个相关页面,一切都有一些问题 我想: 使用 webpack 捆绑我的 web 应用程序 在我的源 js 中使用 ES 模块并将它们转换为更广泛的浏览
我即将在 SMPP 上工作。我对从计算机系统到移动站的消息如何传递有基本的了解,我已经阅读了有关消息如何从 ESME 到 SMSC 再到移动站的信息。但实际上我无法理解。我的意思是,这些 (ESME
我有以下示例运行,而 JS 在其上没有捆绑器。 // index.js ;(async () => { const mod = await import('/index.json') cons
在阅读 webpack 文档中有关 tree shaking 的内容时,我遇到了这句话: In a 100% ESM module world, identifying side effects is
在阅读 webpack 文档中有关 tree shaking 的内容时,我遇到了这句话: In a 100% ESM module world, identifying side effects is
我正在开发一个 SMS 网关,我在考虑我应该在其中实现的功能。因此,我查看了一些 SMS 网关(SMSNOW、SMS studio 和 Ozeki)作为示例。 我几乎完成了实现,但我遇到了几乎所有 S
我正在尝试在 ESM 模块上使用 tone.js。 (我可以在带有 bundler 的“commonjs”中毫无问题地使用它) 在我的html中 和 tests.js: import * as To
我正在尝试获取 Esri ArcGis's NPM package与 SvelteKit 一起工作。 根据链接文档,@arcgis/core 应该是 ESM。但是,当我尝试将其导入 SvelteKit
我有以下组件: App.js import React from "react"; import { Slider } from "./Slider"; function App() { retu
当浏览器现在支持原生 ESM 时,为什么开发人员仍然需要使用像 rollup 和 webpack 这样的模块捆绑器 最佳答案 你不需要模块打包器——开发人员甚至在模块和 Webpack 存在之前就能够
我一直在尝试解决这个问题一个星期,但似乎无法真正找到问题所在。 我关注了this tutorial但我没有自己的项目结构(见下图) 在 esm.js 中: require = require("esm
我的设置 Node v14.16.0 我有一个测试文件,其中包含一个用 ESM 模块 (import) 编写的简单测试。 在 package.json我有一个脚本(遵循Jest documentati
我有一个组件库,它将发布到 npm 以供 razzle 应用程序使用。我想要对最佳实践发表意见的主要问题是,这些包应该用 cjs 还是 esm 构建,每个的缺点是什么? 我可以只构建到 cjs 吗?
我是一名优秀的程序员,十分优秀!