2017-02-15 18 views
11

Tôi đang triển khai các thử nghiệm vào một dự án hiện tại hiện không có kiểm tra. Các thử nghiệm của tôi không thể biên dịch nhập khẩu node_modules/.Thiết lập Jest "Cú pháp: Xuất mã thông báo không mong muốn"

/Users/me/myproject/node_modules/lodash-es/lodash.js:10 
export { default as add } from './add.js'; 
^^^^^^ 
SyntaxError: Unexpected token export 

    at transformAndBuildScript (node_modules/jest-runtime/build/transform.js:320:12) 
    at Object.<anonymous> (app/reducers/kind_reducer.js:2:43) 
    at Object.<anonymous> (app/reducers/index.js:12:47) 

Cách giải quyết tôi đã tìm thấy là 'danh sách trắng' node_modules trong package.json jest cấu hình như thế này:

"jest": { 
    "transformIgnorePatterns": [ 
     "!node_modules/" 
    ] 
    } 

Điều này có vẻ giống như một hack vì phải mất hơn 1 phút để chạy một cách đơn giản kiểm tra nhập khẩu node_modules/lodash-es/lodash.js.

Bất kỳ trợ giúp hoặc hướng nào được đánh giá cao, cảm ơn!

+0

Rất nhiều nút module xuất khẩu ES5 để jest có thể chạy nó ra của hộp mà không cần biến đổi. đó là lý do tại sao bởi jest mặc định không biến đổi node_modules. Trong trường hợp này, lodash-es đặc biệt xuất các mô-đun es, vì vậy bạn phải để jest biến đổi mã đó. Bạn có thể an toàn nếu bạn sử dụng '"! Node_modules/lodash-es "' trong 'transformIgnorePatterns' của bạn thay vào đó để jest chỉ chạy babel trên lodash-es. –

Trả lời

9

tôi đã để thêm video này vào tôi .jestconfig:

"transformIgnorePatterns": [ 
    "<rootDir>/node_modules/(?!lodash-es)" 
] 
9

Đăng một câu trả lời hoàn chỉnh hơn ở đây:

jest theo mặc định không biến đổi node_modules vì ​​node_modules là rất lớn. Hầu hết các mô-đun nút được đóng gói để trưng ra mã ES5 vì đây là chương trình có thể chạy được mà không cần phải chuyển đổi thêm nữa (và phần lớn tương thích ngược).

Trong trường hợp của bạn, lodash-es đặc biệt trưng ra các mô-đun ES, cần phải được Jest xây dựng thông qua babel.

Bạn có thể thử thu hẹp danh sách trắng của mình xuống để Jest không cố gắng chuyển mọi tệp javascript trong node_modules qua babel.

Tôi nghĩ rằng cấu hình đúng trong trường hợp của bạn là:

"jest": { 
    "transformIgnorePatterns": [ 
    "/!node_modules\\/lodash-es/" 
    ] 
} 
Các vấn đề liên quan