Typescript 将 html 个文件作为字符串导入(Express)
Typescript importing html files as a string (Express)
我正在尝试将 html 文件作为字符串导入 import template as "./template.html"
以便通过 Express 的 res.end(template);
函数将其提供给用户。
我在项目的根目录中创建了一个 index.d.ts
文件,其中包含以下内容:
declare module '*.html' {
const value: string;
export default value;
}
它让我导入 template.html
没有任何问题,但是当我 运行 程序时它说
/home/koen/Workspace/xyz/src/template.html:1
<!DOCTYPE html>
^
SyntaxError: Unexpected token <
at Module._compile (internal/modules/cjs/loader.js:723:23)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Module.require (internal/modules/cjs/loader.js:692:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object.<anonymous> (/home/koen/Workspace/xyz/out/index.js:11:41)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
它几乎就像是在尝试 运行 将 html 变成 Javascript 之类的。任何想法为什么会这样?我卡住了...
通过安装 Babel 修复了它。感谢 index.d.ts
打字稿知道内容的类型(字符串)。但是它不知道如何解析它。
以防其他人遇到同样的问题:
1。 安装babel core和cli
运行 以下命令:npm install --save-dev @babel/cli @babel/core
2。 安装 Typescript 预设
Babel 将接管 Typescript 到 Javascript 的转译。为此,我们必须安装 preset-typescript
预设。
运行 以下命令:npm install --save-dev @babel/preset-typescript
现在在项目的根目录中打开 babel.config.json
(如果不存在,请创建它)并添加以下内容:
{
"presets": [
"@babel/preset-typescript"
]
}
3。 防止 tsc 转译
我们这里并没有完全摆脱tsc
。我们仍将使用它来检查类型。但如前所述,Babel 正在接管转译过程,我们不希望发生冲突。在 tsconfig.json
内,将 compilerOptions.noEmit
设置为 true
。
4。 可选:安装 @babel/preset-env
预设
如果您打算使用 ES2015+ 语法,则必须安装此语法。过程同步骤2。
5。 安装 babel-plugin-transform-html-import-to-string
天哪……是的。我知道这是一个很长的名字。这是一个 Babel 插件,可以让我们导入 html 个文件。
运行 命令:npm install --save-dev babel-plugin-transform-html-import-to-string
打开项目根目录中的 .babelrc
文件(再一次,如果它不存在,请创建它)并添加以下内容:
{
"plugins": [
"transform-html-import-to-string"
]
}
6. 将脚本添加到 package.json 以构建和 运行 应用程序
"scripts": {
"start": "tsc && babel src --out-dir lib --extensions '.ts,.tsx' && node lib/index.js"
}
tsc 将确保所有输入都是正确的,babel 将接管转译部分。
我正在尝试将 html 文件作为字符串导入 import template as "./template.html"
以便通过 Express 的 res.end(template);
函数将其提供给用户。
我在项目的根目录中创建了一个 index.d.ts
文件,其中包含以下内容:
declare module '*.html' {
const value: string;
export default value;
}
它让我导入 template.html
没有任何问题,但是当我 运行 程序时它说
/home/koen/Workspace/xyz/src/template.html:1
<!DOCTYPE html>
^
SyntaxError: Unexpected token <
at Module._compile (internal/modules/cjs/loader.js:723:23)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Module.require (internal/modules/cjs/loader.js:692:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object.<anonymous> (/home/koen/Workspace/xyz/out/index.js:11:41)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
它几乎就像是在尝试 运行 将 html 变成 Javascript 之类的。任何想法为什么会这样?我卡住了...
通过安装 Babel 修复了它。感谢 index.d.ts
打字稿知道内容的类型(字符串)。但是它不知道如何解析它。
以防其他人遇到同样的问题:
1。 安装babel core和cli
运行 以下命令:npm install --save-dev @babel/cli @babel/core
2。 安装 Typescript 预设
Babel 将接管 Typescript 到 Javascript 的转译。为此,我们必须安装 preset-typescript
预设。
运行 以下命令:npm install --save-dev @babel/preset-typescript
现在在项目的根目录中打开 babel.config.json
(如果不存在,请创建它)并添加以下内容:
{
"presets": [
"@babel/preset-typescript"
]
}
3。 防止 tsc 转译
我们这里并没有完全摆脱tsc
。我们仍将使用它来检查类型。但如前所述,Babel 正在接管转译过程,我们不希望发生冲突。在 tsconfig.json
内,将 compilerOptions.noEmit
设置为 true
。
4。 可选:安装 @babel/preset-env
预设
如果您打算使用 ES2015+ 语法,则必须安装此语法。过程同步骤2。
5。 安装 babel-plugin-transform-html-import-to-string
天哪……是的。我知道这是一个很长的名字。这是一个 Babel 插件,可以让我们导入 html 个文件。
运行 命令:npm install --save-dev babel-plugin-transform-html-import-to-string
打开项目根目录中的 .babelrc
文件(再一次,如果它不存在,请创建它)并添加以下内容:
{
"plugins": [
"transform-html-import-to-string"
]
}
6. 将脚本添加到 package.json 以构建和 运行 应用程序
"scripts": {
"start": "tsc && babel src --out-dir lib --extensions '.ts,.tsx' && node lib/index.js"
}
tsc 将确保所有输入都是正确的,babel 将接管转译部分。