【发布时间】:2021-12-01 08:48:13
【问题描述】:
有没有办法通过 Webpack 将 Yaml 导入 Typescript 文件而不会出错?
// webpack config
const path = require('path');
module.exports = {
entry: './src/index.ts',
mode: 'production',
module: {
rules: [
{
test: /\.yaml$/,
use: 'yaml',
},
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
],
},
resolve: {
extensions: ['.tsx', '.ts', '.js'],
},
output: {
filename: 'index.js',
path: path.resolve(__dirname, 'dist'),
libraryTarget: 'commonjs',
},
};
// package.json
"devDependencies": {
"yaml-ts-loader": "^1.0.0",
.....
在test.ts 文件中
import examples from './test-examples.yaml';
describe('', () => {...})
结果
TSError: ⨯ Unable to compile TypeScript:
tests/mytest.test.ts:1:22 - error TS2307: Cannot find module './test-examples.yaml' or its corresponding type declarations.
1 import examples from './test-examples.yaml';
这适用于 Javascript 但在打字稿中失败
有没有办法通过 Webpack 将 Yaml 导入 Typescript 文件而不会出错?
编辑
第二次尝试
- 正在删除 yaml-ts-loader`
- 添加
yaml-loader - 创建
global.d.ts
declare module '*.yaml' {
const data: any;
export default data;
}
- 将类型添加到
tsconfig.json
{
"compilerOptions": {
"outDir": "./dist",
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext", "es2015"],
"sourceMap": true,
"noEmitOnError": true,
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": false,
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"module": "commonjs",
"declaration": true,
"downlevelIteration": true
},
"include": ["global.d.ts", "src"],
"exclude": ["node_modules", "tests"]
}
得到相同的结果
这是运行测试的代码的 sn-p ..(在 package.json 中)
"scripts": {
"test": "mocha -r ts-node/register tests/**/*.test.ts",
....
}
并且测试像这样导入 yaml..
import examples from './test-examples.yaml';
但是因为我没有使用 webpack 进行测试(我不认为我是) 这可能是问题吗?是否有必要使用 Webpack 编译我的测试(因为导入 YAML 的是测试文件本身),然后在编译后的版本上运行 Mocha 测试?还是没有必要?
==============
编辑#2
我最终解决了这个问题,并使用 fs 和一个将 YAML 转换为 JSON 的 npm 模块。
【问题讨论】:
标签: typescript webpack yaml