Arm*_*ndo 4 scope package typescript reactjs jestjs
我正在开发一个带有react-native和typescript的应用程序,并使用Jest进行测试,但是当我使用作用域包(@assets)时遇到问题,Jest无法找到路径并给出错误。
目录结构如下所示:
project/
assets/
img/
foo.png
package.json
src/
Foo.ts
build/
Foo.js
// assets/package.json
{
"name": "@assets" // My @assets scope
}
// build/Foo.js
const image = require('@assets/img/foo.png'); // <- error in Jest
Run Code Online (Sandbox Code Playgroud)
因此,当我开玩笑时:
npm run jest build /
它找不到'@ assets / img / foo.png'并抛出错误:
从'Foo.js'中找不到模块'@ assets / img / logo.png'
如何在Jest中使用范围包?
开玩笑的版本:20.0.4
谢谢
对于那些到达这里并在有作用域的组织下使用私有软件包的用户,这就是我的解决方法:
"jest": {
"moduleNameMapper": {
"^@org-name/(.*)$": "<rootDir>/node_modules/@org-name/$1/dist/$1.es5.js"
}
}
Run Code Online (Sandbox Code Playgroud)
假设所有作用域包都具有与其导出模块相似的路径。如果没有,则可以单独指定它们:
"jest": {
"moduleNameMapper": {
"^@org-name/package-one$": "<rootDir>/node_modules/org-name/package-one/dist/package.js",
"^@org-name/package-two$": "<rootDir>/node_modules/org-name/package-two/build/index.js"
}
}
Run Code Online (Sandbox Code Playgroud)
只需要定义moduleNameMapperin jest 配置:
// package.json
"jest": {
"moduleNameMapper": {
"^@assets.+\\.(png)$": "<rootDir>/assetsTransformer.js"
},
}
// assetsTransformers.js
const path = require('path');
module.exports = {
process(src, filename, config, options) {
return 'module.exports = ' + JSON.stringify(path.basename(filename)) + ';';
},
};
Run Code Online (Sandbox Code Playgroud)
感谢您的评论:-)
| 归档时间: |
|
| 查看次数: |
1063 次 |
| 最近记录: |