2017-03-06 53 views
15

我期待能够使用的WebPack别名使用时开玩笑地解决进口,最优地引用webpack.aliases,以避免重复。测试用玩笑和别名的WebPack

玩笑的conf:

"jest": { 
    "modulePaths": ["src"], 
    "moduleDirectories": ["node_modules"], 
    "moduleNameMapper": { 
     "^@shared$": "<rootDir>/shared/", 
     "^@components$": "<rootDir>/shared/components/" 
    } 
    }, 

的WebPack别名:

exports.aliases = { 
    '@shared': path.resolve(paths.APP_DIR, 'shared'), 
    '@components': path.resolve(paths.APP_DIR, 'shared/components'), 
}; 

进口:

import Ordinal from '@shared/utils/Ordinal.jsx'; 
import Avatar from '@components/common/Avatar.jsx'; 

出于某种原因,@会造成一些问题,移除,从而当(在别名和进口),它可以找到sharedcomponents仍不能解决。

FAIL src/shared/components/test/Test.spec.jsx 
    ● Test suite failed to run 

    Cannot find module '@shared/utils/Ordinal.jsx' from 'Test.jsx' 

我一直在使用jest-webpack-aliasbabel-plugin-module-resolverJest/Webpack docs

+0

,因为你使用的WebPack-2使用'变换ES2015模块,commonjs'在ENV:测试?见:使用与 - 的WebPack-2](https://facebook.github.io/jest/docs/webpack.html#using-with-webpack-2) – birdspider

+0

的可能的复制http://stackoverflow.com/问题/ 33190795 /配置-开玩笑到模拟-的WebPack-决心根和 - 解决混叠 – hazardous

+0

的''@符号表示[作用域包(https://docs.npmjs.com/misc/scope) ,通常在您的第三方包路径中进行搜索。 – hazardous

回答

0

这似乎已被修复。

下面是一个工作设置:

版本

"jest": "~20.0.4"

"webpack": "^3.5.6"

的package.json

"jest": { 
    "moduleNameMapper": { 
    "^@root(.*)$": "<rootDir>/src$1", 
    "^@components(.*)$": "<rootDir>/src/components$1", 
    } 
} 

webpack.shared.js

const paths = { 
    APP_DIR: path.resolve(__dirname, '..', 'src'), 
}; 

exports.resolveRoot = [paths.APP_DIR, 'node_modules']; 

exports.aliases = { 
    '@root': path.resolve(paths.APP_DIR, ''), 
    '@components': path.resolve(paths.APP_DIR, 'components'), 
}; 
0

FWIW尝试,尝试切换别名秩序,保持更加具体了具体程度下降,如

"moduleNameMapper": { 
    "^@components$": "<rootDir>/shared/components/", 
    "^@shared$": "<rootDir>/shared/" 
} 
+0

联合利奥的答案尝试,仍然有同样的错误。 – speak

+0

是否有可能共享完整的代码,github最好? – hazardous

+0

不幸的是,它不是一个私人公司资料库。 – speak

8

因为我有同样的问题之前,我看了一遍,和文档这一次更仔细。正确的配置应该是:

"jest": { 
    "moduleNameMapper": { 
     "^@shared(.*)$": "<rootDir>/shared$1", 
     "^@components(.*)$": "<rootDir>/shared/components$1" 
    } 
    }, 
+0

我试着实现这个配置,但仍然有同样的问题。它无法找到导入的文件:''Test.jsx''找不到模块'@ shared/utils/Ordinal.jsx'。 – speak

+1

我不得不用''modulePaths“来解决我的路径:[”src“]'。然后是的,这个解决方案工作:''^ Commons $“:”./Commons“' – mayid