我有两个npm软件包。我提供了到存储库的直接链接,还提供了下面的相关代码段和描述。
以下是问题的摘要以及下面的详细内容
"module": "es2015"
编译其代码es2015
,但是项目2测试有效。es2015
选项一起使用?以下是详细信息
Here是一个非常简单的TypeScript npm模块,我们将其称为项目1。它具有一个index.ts
文件,该文件导出其中包含一种方法的对象。我执行了yarn tsc
,在index.js
文件夹中生成了一个./lib
文件,并带有一个自动生成的声明文件index.d.ts
。我已经忽略了src/index.ts
,因此该仓库仅显示lib
文件夹,如果该仓库作为npm模块在npm注册表中发布,它将可用。
这些是相关文件:
// tsconfig.js
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"moduleResolution": "node",
"noImplicitReturns": true,
"noImplicitThis": true,
"sourceMap": false,
"target": "es5",
"module": "es2015",
"skipLibCheck": true,
"strict": true,
"resolveJsonModule": true,
"outDir": "./lib",
"declaration": true
},
"exclude": ["node_modules", "lib"]
}
// package.json
{
"name": "TypedNpmModule",
"version": "1.0.0",
"description": "",
"main": "./lib/index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"tsc": "tsc"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {},
"devDependencies": {
"prettier": "^1.17.0",
"typescript": "^3.4.5"
}
}
// src/index.ts
export const myObject = {
method1: function(str: string) {
return str;
}
};
TypeScript生成的.js
文件是
export var myObject = {
method1: function(str) {
return str;
},
};
Here是一个非常简单的TypeScript npm模块,我们将其称为项目2,它导入了项目1。它有一个index.ts
导出了一个actions
对象,该对象的方法只是调用从项目1中导出的对象中获得的方法:
// src/index.ts
import { myObject } from 'TypedNpmModule';
export const actions = {
meth1: myObject.method1('hello'),
};
该项目使用Jest
测试调用此actions
对象:
// src/__tests__/index.test.js
import { actions } from '../index';
test('actions', () => {
const result = actions.meth1('hello');
expect(result).toMatchSnapshot();
});
// package.json
{
"name": "Jest1",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/jest": "^24.0.12",
"jest": "^24.7.1",
"prettier": "^1.17.0",
"ts-jest": "^24.0.2",
"typescript": "^3.4.5"
},
"dependencies": {
"TypedNpmModule": "evian-pring/TypedNpmModule#master"
},
"jest": {
"transform": {
"^.+\\.tsx?$": "ts-jest"
}
}
}
这是问题所在
当我使用npx jest
运行Jest测试时,出现错误:
答案 0 :(得分:0)
问题在于,Jest默认情况下会忽略node_modules
中的所有文件。因此,没有任何转换应用于任何外部库。我在另外this个线程中读到,ts-jest
要求文件使用commonjs
,并且由于project1
的文件正在使用ES6本机模块,因此会出现错误。
解决方案:
project 2
中,告诉Jest不要忽略project1
软件包。这是在Jest配置中的键transformIgnorePatterns
下完成的。进一步了解该here project 2
中,正确安装babel:除了babel-jest
,我们还需要@babel/core
和@babel/preset-core
。 yarn add --dev @babel/core @babel/preset/core babel-jest
babel.config.js
文件而不是.babelrc
文件。 Here是为什么。这就是project2
的样子module.exports = function(api) {
api.cache(true);
const presets = ["@babel/env"];
return {
presets
};
};
另请参阅问题中链接的存储库以获取工作代码。