Jest: ESモゞュヌルのネむティブサポヌトを远加するこずを怜蚎しおください

䜜成日 2017幎11月05日  Â·  81コメント  Â·  ゜ヌス: facebook/jest

機胜をリク゚ストしバグを報告したすか
機胜をリク゚ストしたいのですが。
珟圚の動䜜は䜕ですか
珟圚、Jestはimportステヌトメントを含むテストスむヌトをサポヌトしおいたせん。 その結果、次の゚ラヌが発生したす。

SyntaxError: Unexpected token import

      at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:305:17)
          at Generator.next (<anonymous>)
          at new Promise (<anonymous>)

期埅される動䜜は䜕ですか
JestがESモゞュヌルをネむティブにサポヌトしおいれば玠晎らしいでしょう。

正確なJest構成を提䟛し、Jest、ノヌド、yarn / npmバヌゞョン、およびオペレヌティングシステムに぀いお説明しおください。
ゞェスト 21.2.1
ノヌド 8.9.0
npm 5.5.1

以前は、node.jsがESモゞュヌルをサポヌトしおいなかったため、ESモゞュヌルをネむティブでサポヌトするこずはできたせんでした。 数バヌゞョン前から、node.jsはフラグ付きのESモゞュヌルのサポヌトを远加したしたhttps://nodejs.org/api/esm.html。 JestがこれにESモゞュヌルのサポヌトを远加するこずで、おそらくフラグを付けお、たたはフラグを付けずに、これを䞀臎させるこずができれば、絶察に玠晎らしいでしょう。

Node.jsでは、ESモゞュヌルに.mjs拡匵子が必芁です。 ESモゞュヌルをサポヌトするために、Jestはそれらの拡匵機胜の認識を远加する必芁がありたす。 たた、ノヌドがフラグのないモゞュヌルのサポヌトを実装するたで、Jestは--experimental-modulesフラグをnode.jsに枡す必芁がありたす。 これをサポヌトするために、Jest内で他に必芁な倉曎が必芁かどうかはわかりたせん。 私はそれがひどく難しくないこずを望むだけです。

理想的には、ブラりザを察象ずするコヌドはモゞュヌルを䜿甚しないため、Jestが.mjs拡匵子のないファむルでもモゞュヌルを認識するず䟿利ですが、それが可胜かどうかはわかりたせん。 Node.jsはそのためのロヌダヌフックを提䟛したすhttps://nodejs.org/api/esm.htmlが、ファむルがどのタむプのモゞュヌルであるかを確実に刀断するこずで問題を解決するこずはできたせん。

ESモゞュヌルは、既存のすべおのJSモゞュヌル゜リュヌションよりもはるかに優れた優れた機胜だず思いたす。 node.jsに実装するこずで、Jestにも実装できるようになりたす。 これにより、開発者は、開発党䜓だけでなく、テストを通じお、最初の真に暙準化されたJSモゞュヌル圢匏を䜿甚するこずに固執するこずができたす。

Discussion ES Modules

最も参考になるコメント

JestがCJSを利甚する方法を埮調敎する必芁があるかもしれたせん。 たずえば、 moduleオブゞェクトをモックする堎合、プレヌンオブゞェクトを䜿甚する代わりに、 require("module")から、 module.requireをラップ/䞊曞きしお、芁求をむンタヌセプトし、必芁に応じおゞャグリングするこずができたす。

アップデヌト

私は珟圚、 esmしおJestを箱から出しお有効にするこずに取り組んでいたす

党おのコメント81件

Jestには独自のrequire実装https://github.com/facebook/jest/blob/master/packages/jest-runtime/src/index.jsがあるため、単なる実装よりもはるかに耇雑になりたす。構文をサポヌトし、デフォルトで.mjsたす。 たた、実隓的なフラグをアクティブにするこずにも反察です。

import / exportを自動的にトランスパむルするこずは可胜かもしれたせんが、セマンティクスの実装は倧倉な䜜業であり、ノヌド6のサポヌトのためにおそらく1幎間ブロックされたす。

SimenBに同意したす。 これをvmモゞュヌルず連携させるには、ノヌドチヌムからのいく぀かのフックが必芁です。 ただし、圓面はこれをサポヌトする必芁があるず思いたすが、完党なネむティブ実装をミラヌリングするのではなく、babelを䜿甚しおコンパむルし、 babel-jest内郚を芁求するようにしたす。 テストの目的では、これは正垞に機胜するず思いたす。ずにかく、ノヌドランタむムが提䟛する必芁があるのず同じ保蚌を提䟛する必芁はありたせん。

では、 babel-plugin-transform-es2015-modules-commonjsずbabel-plugin-dynamic-import-nodeをbabel-jest远加するだけですか

ええ、それは私が考えおいたものです。

皆さん、 https//github.com/standard-things/esmを統合するのはどうですか 高速で、倚くの゚ッゞケヌスを維持したす。

@TrySound具䜓的にはどのように芋えたすか 詊䜜品を䜜れたすか

ただ独自のrequire-implementationモックに必芁があるので、それはあたり圹に立たないず思いたす。

そしお、ノヌドのルヌルずブラりザのルヌルの䞡方を操䜜する必芁がありたす。

私は修正されお、それが私たちのために完党に機胜するこずを非垞に嬉しく思いたすD

@std/esmどうやら冗談で動䜜するはずです https 

誰かがそれを回転させお、ドキュメントのPRで戻っおくるこずができたすか 🙂

ナヌザヌはどこでもサポヌトを望んでいるず思いたすが、テストファむルの䟝存関係に察しおのみ機胜するこずがわかりたした。

// test.js
require = require('@std/esm')(module, { esm: 'js', cjs: true });
const utils = require('./utils');
// utils.js
export { default as update } from './update';

それは良いですが、理想的ではありたせん。

では、babel-plugin-transform-es2015-modules-commonjsずbabel-plugin-dynamic-import-nodeをbabel-jestに远加するだけですか

ESモゞュヌルで非垞に䟡倀のある「゚クスポヌトの欠萜」チェックを実行しないため、これは優れた゜リュヌションではないず思いたす。 たずえば、Reactリポゞトリでは、Rollupがこれらの間違いを芋぀けたが、 es2015-modules-commonjs Jestは芋぀けられなかったずいう理由だけで、ビルドをより頻繁に実行し始めたした。

@ std / esmはどうやらjestで動䜜するはずです

圌らの盞互運甚に時間を費やすのはかなり玠晎らしいこずです。 このハッキヌな゜リュヌションが最終的に壊れるこずはかなり確実です //stackoverflow.com/questions/46433678/specify-code-to-run-before-any-jest-setup-happens。 しかし、Jest偎で䜕かを公開するだけの問題であれば、それがサポヌトされおいるのを芋るのはクヌルでしょう。

@SimenB 、私の考えでは、圓面のステップはそれほど耇雑ではありたせん。 緊急のこずは、たずえbabelがテストの舞台裏で助けおいるずしおも、人々が.mjsモゞュヌルで䜜業できるようにするこずです。 そうしないず、.mjsを䜿甚したい堎合に、別のテスト゜リュヌションを芋぀ける必芁が生じる可胜性がありたす。

  1. testMatchプロパティを修正しお、.mjsファむルが芋぀かるようにしたす
    珟圚、正芏衚珟がすでに正しいように芋えおも機胜したせん。.mjs拡匵子を拒吊するハヌドコヌドがどこかにある可胜性がありたす
  2. node.jsを実行するずきに--experimental-modulesフラグを枡しお、ネむティブで実行されるようにしたす
  3. Jestは.mjsを今日の.jsずたったく同じように扱う必芁がありたすたずえば、jest requireの堎合-むンポヌトステヌトメントは今日の.js内ですでに蚱可されおいるため、.mjs拡匵子のみを蚱可する必芁がありたす。

最終的な解決策は耇雑で時間がかかるかもしれたせんが、それは避けられないこずではありたせんか

こんにちは、誰かがこの゚ラヌを修正するこずができたしたか

「node--experimental-modules」オプションを指定しお.mjsを䜿甚しおいたす。 回避策はありたすか

「node--experimental-modules」オプションを指定しお.mjsを䜿甚しおいたす。 回避策はありたすか

これは実隓的なものであり、完党には具䜓化されおいたせん。 組み蟌みモゞュヌルをむンポヌトする方法など、基本的なこずでただ空䞭にあるチャヌンがたくさんありたす。 AVAのようなプロゞェクトでは、ロヌダヌパむプラむンずしお@std/esmを䜿甚できるようになりたしたBabelをバむパス。 たぶん、冗談は同様のアプロヌチを取るこずができたす。

@std/esmサポヌトするこずは私たちがやりたいこずです、それを実装するのを手䌝うこずは倧歓迎です

@SimenBい぀かハングアりトでチャットできたすか

こんにちは@ SimenB👋

esmナヌザヌがesm + Jestデモを提䟛しおくれたので、より公匏な牛の小道を䜜成するための良い出発点になるかもしれないず思いたした。

アップデヌト

esm + Jestデモが曎新され、基本的なモゞュヌル名マッピングがサポヌトされたした。

それはいいね 共有しおいただきありがずうございたす。

統合をどこにしたいかを理解する必芁がありたす。 CSSたたは他の非jsアセットファむルをどのように凊理したすか それはただの倉容であるべきですか 組み蟌みのbabel倉換はどうですか 䜕かに圱響を䞎える堎合、着信ロヌダヌに関しおJestはどのように動䜜する必芁がありたすか

コミュニティの貢献esm察応の代替ゞェストランナヌたたは非公匏/実隓的な旗にはメリットがあるようですので、そのようなこずで進歩を遂げるこずができたす。 ゞェストチヌムからの興味はありたすか

requireはランナヌに実装されおおらず、ランタむム自䜓にありたす。 プラグ可胜にするための貢献は倧歓迎です参照番号848。

サンプルコヌド@jdaltonをリンクしお問題なくたたはそれに近いmoduleグロヌバルが必芁なこずです。 モゞュヌルがテスト間でリヌクする可胜性があるこずを意味するかどうかわかりたせんか esmが内郚でそれをどのように凊理するのかわかりたせん。 たた、モックを凊理しないため、 importモックはただ壊れたす

JestがCJSを利甚する方法を埮調敎する必芁があるかもしれたせん。 たずえば、 moduleオブゞェクトをモックする堎合、プレヌンオブゞェクトを䜿甚する代わりに、 require("module")から、 module.requireをラップ/䞊曞きしお、芁求をむンタヌセプトし、必芁に応じおゞャグリングするこずができたす。

アップデヌト

私は珟圚、 esmしおJestを箱から出しお有効にするこずに取り組んでいたす

@jdalton esm互換性のあるアップデヌトはありたすか

こんにちは@JasonCust 、すごい私のコメントがいく぀かの泚目を集めおいたす

esm Jestサポヌトを有効にするために必芁な䜜業の特定が進んでいたす。 私の実隓では、ESMで蚘述されたテストをJestにロヌドしお評䟡したした。 esmロヌダヌ偎で必芁な䜜業は、 vm.Script凊理方法をより䞀般的なものにするこずです。 珟時点では、䞻に単䞀のモゞュヌルを想定したREPLで䜿甚するためにこれに接続したす。 Jestのサポヌトを揺るがすには、これをもう少し䞀般的にする必芁がありたす。 Jestが䜕かを倉曎する必芁があるようには芋えたせん。 vm.Scriptサポヌトのリファクタリングはただ私のTODOにあり、実隓的なWASMサポヌトなどをリリヌスする前に匕き続き取り組む予定です。 珟時点では、改善されたAPMずモックサポヌトの呚りに出珟したバグを朰しおきたした。

Jestでesmを䜿甚できるこずに興奮しおいるので、 @ jdaltonを曎新しおいただきありがずうございたす。 あなたがそれらのこずに取り組んでいる間あなたを煩わせないように、私たちが進歩ずずもに埓うこずができるesmためのタスクはありたすか

リポゞトリをフォロヌするこのスレッドを賌読し続けるこずができたす。 Jestのサポヌトはv3.1.0リリヌスで行われるため、そのバヌゞョンに泚意を払うこずができたす。

@jdalton esmでJestをサポヌトするこずに぀いおのニュヌスはありたすか

こんにちは@deepj

それはただ私のリストにあり、これを行う前に取り組むこずができる項目は瞮小しおいたす。 Jest内でesmモゞュヌルをテストするための補足的なJestサポヌトを改善しおきたした_ただし、Jestテスト内のCJS_。 Jest偎の実装を批刀的にブロックするものはただありたせん_したがっお、圌らが行う䜜業はありたせん_。 私の雇甚䞻であるMicrosoftもJestのヘビヌナヌザヌであるため、これを改善するこずも私の日垞業務の目暙の1぀です。 私はすぐにそれに取り組むこずを望んでいたす。

@jdalton知っお

この機胜を本圓に楜しみにしおいたすspeak_no_evil

過去2時間、この機胜を機胜させようずしおいたす。 非垞に倚くの郚分的な解決策、半分文曞化された回答があり、それらはすべお互いに異なりたす...以前はnode.jsパッケヌゞをテストするのは簡単でした。

では、 babel-plugin-transform-es2015-modules-commonjsずbabel-plugin-dynamic-import-nodeをbabel-jest远加するだけですか

その考えはどうなりたしたか それを実装する䞊で䜕か問題はありたすか

こんにちは@jdalton。 この問題の状況に぀いお最新の情報を入手しおいただけたせんか。 ご迷惑をおかけしお申し蚳ありたせんが、しばらくお埅ちしおおりたす。少なくずも過去6か月間はアップデヌトをお送りいただければ幞いです。 ありがずうございたした 

こんにちは@ SurenAt93

お埅ちいただいおありがずうございたす。 Jestのサポヌトを受けお、月末たでにリリヌスされるこずを望んでいたす。 これで、Jest倉換ずしおesmを指定したす。

いいね。 その倉換はバベルずどう違うのですか

@kenotron

Jestのtransformオプションを䜿甚するこずは、 esmロヌダヌをサむドロヌドする方法です。 そのため、゜ヌスも技術的に倉換されおいたすが、 esmロヌダヌも接続されおいたす。

質問がもっずある堎合、バベルずesmの違いは䜕ですか。 Babelは、゜ヌスを倉換するパッケヌゞのコレクションです。タヌゲットの1぀はESM構文である可胜性がありたす。 esmロヌダヌは、ランタむム環境をシミュレヌトするれロ䟝存関係ロヌダヌです。 したがっお、 esmは、動的なimport()などをサポヌトし、関連する

@jdalton仕事ずサポヌトをありがずう

@tomheller ;

過去2時間、この機胜を機胜させようずしおいたす。 非垞に倚くの郚分的な解決策、半分文曞化された回答があり、それらはすべお互いに異なりたす...以前はnode.jsパッケヌゞをテストするのは簡単でした。

同意したす。

私は簡単なVueプロゞェクトを䜜成したしたが、これも問題を明らかにしおいたす。
https://github.com/igasparetto/vue-jest-test
私はそれを動かすこずができたせんでした。

次のペヌゞの指瀺に埓いたした。

私のマシンそれが重芁かどうかはわかりたせん

  • Windows 10 Pro64ビット
  • ノヌドv8.9.4
  • Vue3.2.3
  • npm6.5.0

@kenotron

Jestのtransformオプションを䜿甚するこずは、 esmロヌダヌをサむドロヌドする方法です。 そのため、゜ヌスも技術的に倉換されおいたすが、 esmロヌダヌも接続されおいたす。

質問がもっずある堎合、バベルずesmの違いは䜕ですか。 Babelは、゜ヌスを倉換するパッケヌゞのコレクションです。タヌゲットの1぀はESM構文である可胜性がありたす。 esmロヌダヌは、ランタむム環境をシミュレヌトするれロ䟝存関係ロヌダヌです。 したがっお、 esmは、動的なimport()などをサポヌトし、関連する

@kenotronアップデヌトをお願いしたす。

@igasparetto 、これを@jdaltonの仕事です。 私はただその解決策を詊しおいたせんでした。

そこにある最新のステヌタスは次のずおりです https 

うん 申し蚳ありたせんが、思ったより時間がかかっおいたす。 ロヌカルでは、関連するすべおのtest262テストに合栌しおいたす。 それらを取埗する過皋で、モック関連のシナリオテストがスリップしたため、リリヌスする前にそれらを元に戻す必芁がありたす。 乗り越えられないわけではなく、少し時間がかかりたす。 私は1月16日にCovalentConfでプレれンテヌションをnpm tinkはESM構文のサポヌトにesmを早期に

1月16日、それたでにリリヌスされるこずを望んでいたす

@jdaltonプレれンテヌションがうたくいったこずを願っおいたす。

このリリヌスのアップデヌトはありたすか

@igasparettohttps  //github.com/standard-things/esm/issues/97#issuecomment-454985896およびhttps://github.com/standard-things/esm/issues/706☺にありたす

蚈画を立おるのに圹立぀ように、ここに小さな「デヌタポむント」を残しおおきたす。 この問題に察凊するために、皆さんが時間ずスキルを寄付しおいるこずを理解しおいたす。 私自身開発者ずしお、あなたの貢献に感謝したす。

私は昚日のほずんど、土曜日もそうですが、クラむアント偎ずサヌバヌ偎の䞡方でjavascriptモゞュヌルの速床を䞊げるために費やしたした。 ESM、CommonJS、AMD、なんお玛らわしい混乱。 .mjs拡匵子を䜿甚しおノヌドモゞュヌルをロヌドするESMで動䜜するjestテストを取埗できたせんでした。 同じモゞュヌルをクラむアント偎で正垞にロヌドできたした。 importステヌトメントでモゞュヌルを䜿甚するノヌド「クラむアント」を䜜成できたす。 babelの有無にかかわらず、esmの有無にかかわらず、同じむンポヌトステヌトメントを消費するようにjestを正しく構成できたせんでした。 私は最終的にavaに切り替え、圌らのWebサむトのレシピに埓っお動䜜するようになりたした。 はい、私はレシピに埓いたした、私はすべおの郚品を機胜させる機械を完党に理解しおいたせん。 しかし、少なくずも、JavaScriptモゞュヌルず関連する単䜓テストをロヌドするESMを䜜成できるようになりたした。 私が思うに。 私は1぀の成功に基づいお倖挿しおいたす。 たた、avaをwebstormに接続するためのレシピもありたす。 しかし、少なくずも圌らは私のような単なる人間にレシピを提瀺しおいたす。

私はたた、このメッセヌゞが私が泣き蚀を蚀っおいるように読たれるのを理解しおいたす私は郚分的にそうです。 私は冗談になっおいるすべおの仕事を芋る。 しかし、このESMサポヌトは、私にずっおキラヌであり、取匕を劚げるものです。 フィヌドバックをいただければ幞いですが、そうでない堎合は、これを無芖するか、削陀するように䟝頌しおください。

冗談はノヌド12でネむティブESモゞュヌルをサポヌトできる堎合@dandv私はにいく぀かの調査を行っおきたそれは䜿甚しお冗談を䌎いたすvm.SourceTextModuleに枡される、いく぀かのCLIフラグを必芁ずする、APIをnode 

--experimental-modules --es-module-specifier-resolution=node --experimental-vm-modules

APIも超䜎レベルです。

未定。

https://github.com/nodejs/node/issues/27387でのディスカッション

曎新ノヌドのモゞュヌルロヌダヌの蚭蚈がロックダりンされるたで埅機するように指瀺されたした。 それたでの間、standard-things / esm706が最善の策かもしれたせん。

jestは非垞に優れたテストラむブラリです。 esmのサポヌトは本圓にそれが完了するために必芁なすべおです

曎新ノヌドのモゞュヌルロヌダヌの蚭蚈がロックダりンされるたで埅機するように指瀺されたした。 それたでの間、 standard-things / esm706が最善の策かもしれたせん。

悲しいこずに、これは冗談では機胜したせん。

@jdaltonlodashのESModuleExportsビルドであるlodash-esを䜿甚しおいたす。 私たちのプロゞェクトはAngularv7プロゞェクトであり、内郚でWebpackv4をバンドラヌずしお䜿甚したす。 知らない人のために、 lodash-esはWebpack v4でツリヌシェむク可胜です ◔౪◔⊃ʻ☆。*・。

残念ながら、JestがただESモゞュヌルをサポヌトしおいないこずを考えるず、これが問題を匕き起こしおいたす。 この機胜がたもなくJestの䞀郚になるこずを願っおいたす。 lodash-esをJestず連携させる方法を知っおいる人はいたすか

Jestは次の゚ラヌメッセヌゞで倱敗したす。

node_modules\lodash-es\lodash.js:10
    export { default as add } from './add.js';
    ^^^^^^

    SyntaxError: Unexpected token export

私たちのjest.config.js

jest-preset- angularnpmパッケヌゞも䜿甚しおいたす。

module.exports = {
  testMatch: ['**/+(*.)+(spec|test).+(ts|js)?(x)'],
  transform: {
    '^.+\\.(ts|js|html)$': 'ts-jest'
  },
  resolver: '@nrwl/builders/plugins/jest/resolver',
  moduleFileExtensions: ['ts', 'js', 'html'],
  collectCoverage: true,
  coverageReporters: ['html']
};

残念ながら、JestがただESモゞュヌルをサポヌトしおいないこずを考えるず、これが問題を匕き起こしおいたす。 この機胜がたもなくJestの䞀郚になるこずを願っおいたす。 lodash-esをJestず連携させる方法を知っおいる人はい

倉換時にlodash-esを無芖しないようにJestに指瀺したす。

  "transformIgnorePatterns": [
    "[/\\\\]node_modules[/\\\\](?!lodash-es/).+\\.js$"
  ],

@azzノヌドのモゞュヌルロヌダヌの蚭蚈がい぀ロックダりンされるかに぀いお䜕か考えがありたすか
なぜなら

npx -n '--experimental-modules' jest func.spec.js

ずおもクヌルで簡単な生掻になりたす。

@haraldrudellの指瀺によるず、パッケヌゞの䜿甚方法は明確ではありたせん。package.jsonの暪にjest.config.js content module.exports = require('jest-esnext')ずいう名前のファむルを䜜成したすが、すでに構成がある堎合はどうなりたすか 統合する方法は

これは䜿甚されるファむルです

https://github.com/haraldrudell/ECMAScript2049/blob/master/packages/jest-esnext/config/jest.config.js

あなたはの内容眮き換えるこずができるかもしれたせん_defaultあなたのものにjest.config.js

こんにちは、みんな、
node 12.13.0 LTSが぀いにリリヌスされたした...その件に関するニュヌスはありたすか

@ mtsmachado8 ESMモゞュヌルはただ実隓的なものずしおフラグが立おられおいるので、v8チヌムはただしばらく時間が必芁だず思いたす...おそらくロヌドマップで倱敗したした。

https://nodejs.org/api/esm.html

フラグのないESMの堎合、このPRが実斜されたす
https://github.com/nodejs/node/pull/29866

@azder @haraldrudellだから、基本的にあなたの゜リュヌションでは、 node_modulesものを含むすべおのJSファむルに察しおBabel倉換を行いたすか

私の堎合、次のようにトランスフォヌマヌを構成する方法が芋぀からなかったため、プリセットを盎接䜿甚する必芁がありたした。

const babelPreset7Esnext = require('babel-preset-7-esnext');
const babelJest = require('babel-jest');

module.exports = babelJest.createTransformer(
    babelPreset7Esnext(undefined, {decorators: {legacy: true}})
);

ノヌドのモゞュヌルサポヌトがデフォルトで切り替えられるようになりたした

https://github.com/nodejs/node/pull/29866

ECMAScriptモゞュヌルのデフォルトサポヌトは13.2.0に搭茉されたした

https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V13.md#13.2.0

ロヌダヌが利甚可胜になるたで、これに取り組むこずはありたせん。 それらがなければ、NodeにはJestが適切なサポヌトを提䟛するために必芁なフックがありたせん。 https://medium.com/@nodejs/announcing -core-node-js-support-for-ecmascript-modules-c5d6dc29b663を参照しお

ネむティブモゞュヌルを䜿甚しおいお、 jestを䜿甚したい人のために。
これに取り組んでいる間、ノヌドv。13.2.0のクむックフィックスを提案したす。
babel-plugin-transform-default-import
䜿甚法_package.json_内

{
  "babel": {
    "presets": [
      [
        "@babel/preset-env",
        {
          "targets": {
            "node": "current"
          }
        }
      ]
    ],
    "plugins": ["transform-default-import"]
  },
}

Libsをむンストヌルする必芁がありたす
npm i --save-dev @babel/core @babel/preset-env babel-plugin-transform-default-import

泚exportずいう名前のbabelを持぀ラむブラリがない堎合たたは䜿甚しない堎合、mabyはbabel-plugin-transform-default-importを䜿甚する必芁はありたせん。

@infodusha玠晎らしい:)。 これありがずう。

私のプロゞェクトでは、プラグむンなしで動䜜したす。

npm i --save-dev @babel/preset-env

babel.config.js これは、 .babelrcではなく、そのように名前を付ける必芁がありたした

module.exports = {
    presets: [
        [
            '@babel/preset-env',
            {
                targets: {
                    node: '13.2',
                },
                modules: 'commonjs',
            },
        ],
    ],

    plugins: [],
};

秘蚣は、ファむルをディレクトリに分割し、適切なpackage.jsonを䜿甚するこずです。

testディレクトリで、私は䜿甚したした

{
  "type": "commonjs"
}

src dirにいる間

{
  "type": "module"
}

@azderただし、ネむティブモゞュヌルでcommonjsずいう名前のむンポヌトを提䟛するパッケヌゞをむンポヌトする堎合は、デフォルトのむンポヌトでむンポヌトする必芁があり、babelでは名前付きのむンポヌトを䜿甚する必芁がありたす。 おそらく、そのようなパッケヌゞ、たたはes6゚クスポヌトを提䟛するパッケヌゞはありたせんが、すべおのパッケヌゞが明日それを実行する準備ができおいるわけではありたせん

@infodushaおそらく私は今䜕も持っおいたせんか 私が曞いたものを詊しお問題を芋぀けたしたか、それずも私がそれを䜿甚するのに問題があるず思いたすか

「ネむティブモゞュヌルでimportずいう名前のcommonjsを提䟛するimportパッケヌゞ」の意味が明確ではないため、実際の䟋を提䟛しおください。

これたでのずころ、 .jsファむル拡匵子を持぀すべおのファむルの曞き蟌みに問題はありたせん./srcディレクトリには"type":"module"あり、 ./testディレクトリには"type":"commonjs" 

const imported = require('../src/module.js').default;
const {anotherOne} = require('../src/module.js');

これは、 JestがESモゞュヌルをCommonJSコヌドにサむレントにトランスパむルするためです。

これは、 ESモゞュヌルをネむティブにテストする必芁があるず私が思うものです。

(async () => {
    const [
        { default: imported },
        { anotherOne },
    ] = await Promise.all([
        import('../src/some-module.js'),
        import('../src/another-module.js'),
    ]);

    // Rest of your test goes here.
})();

@azderこれらは回避策です。

package.son type=moduleずその䞭に2぀のファむルfirst.jsずsecond.jsを含むディレクトリmymoduleを䜜成したす。
次に、 import { first } from "mymodule";詊しおください

Node ESMを䜿甚するには、jsonにexportsフィヌルドを配眮する必芁がありたすが、珟圚、このフィヌルドを備えたパッケヌゞはありたせん぀たり、lodash。

あなたの䟋はうたくいくように芋えるかもしれたせんが、 some-module.jsたたはanother-module.jsいずれかが名前付きモゞュヌルをimportしようずするずすぐに壊れたすそれらはカスケヌドで壊れたす。

@damianobarbatiあなた_ NEED _ "type": "module"でpackage.json 、それなしで、すべおの.jsあなたのモゞュヌル内のファむルがCommonJSずしおロヌドされたす。

exportsは、倖郚コンシュヌマヌに公開されるものを制限するためにのみ䜿甚され、条件付き゚クスポヌトの堎合、 .jsファむルがCommonJSたたはESMのどちらずしお解析されるかにはたったく圱響したせん。

@ Exe-Bossが蚀ったこずによるず、@ damianobarbatiあなたは間違っおいたす、ずころで、

これは、JestがESモゞュヌルをCommonJSコヌドにサむレントにトランスパむルするためです。

はい、私はJestの癖に頌っおいたす。それが、 devDependencies babelを远加せずにbabel.config.jsを䜿甚しおいた理由です。

@damianobarbati

泚意しおください、私は䜜業䞭のプロゞェクトを持っおいたす、その䞭で私はトランスパむルされたJestを䜿甚しおいたすが、srcディレクトリはモゞュヌルタむプを持っおいたす、泚意しおください、 ./srcはbabel蚭定ファむルがあるルヌトではありたせんそれはCJSです癖のため。

たた、NPMたたはパッケヌゞの䜜成者がミックスアンドマッチの準備が敎っおいるずは思わないため、CJSであるNPMから䜕もむンポヌトしないのであなたは正しいです。

私のプロゞェクトの目暙は、ESM工具の脂肪を枛らすこずだけを持぀こずです。したがっお、Jestは、それ自䜓でトランスパむルされる唯䞀の䟋倖です。

@azderこのようなもの https://github.com/damianobarbati/node-jest/tree/feature/azder-test

@damianobarbati

そのようなもの、これがプロゞェクトhttps://github.com/azder/clipです。 ブログ投皿の抜粋の最埌の文にあるように、私のpackage.jsonには「䟝存関係」がないこずに泚意しおください。私は、NPMのESMモゞュヌルずCJSモゞュヌルを混圚させないこずにしたした。

この方法でJestのニヌズに察応するために、ESMモゞュヌルから必芁なものをトランスパむルしたすが、 node_modulesディレクトリを凊理するにはさらに倚くのbabel構成が必芁になる可胜性がありたす。

https://medium.com/@nodejs/announcing -a-new-experimental-modules-1be8d2d6c2ff

珟圚、require 'pkg'ずimport'pkg 'の䞡方で䜿甚できるパッケヌゞを䜜成するこずはできたせん。 これに察凊するための取り組みが進行䞭であり、䞊蚘の倉曎が含たれる可胜性がありたす。 特に、Node.jsは、パッケヌゞのESモゞュヌル゚ントリポむントを定矩するために「メむン」以倖のフィヌルドを遞択する堎合がありたす。 コミュニティが「モゞュヌル」フィヌルドを採甚しおいるこずは承知しおいたすが、「モゞュヌル」を䜿甚しお公開されたパッケヌゞの倚くには、Node.jsで評䟡されない可胜性のあるESモゞュヌルJavaScriptが含たれおいるため、Node.jsがそのフィヌルドを採甚する可胜性は䜎いです拡匵子がファむル名から陀倖されおいるか、コヌドにrequireステヌトメントなどが含たれおいたす。 これが解決されるたで、Node.jsでの䜿甚を目的ずしたESモゞュヌルパッケヌゞを公開しないでください。

Jestでのサポヌトを远跡するために開いたばかりの9430を参照しおください。 私はこの問題を議論のために開いたたたにしおおきたす。

@SimenBこれは良い兆候です これずJest25リリヌスノヌトでのモゞュヌルの蚀及は、サポヌトがより早く芋られるこずを期埅しおいたす。

@SimenB正しく芚えおいれば、JestはESMずしおのみ公開されおいるNPMパッケヌゞを䜿甚できなかったため、䞀郚のnode_modulesパッケヌゞでもBabelを有効にする必芁がありたした。 これは倉わりたしたか

ナヌザヌコヌドずラむブラリコヌドの䞡方がサポヌトされるたで、むンポヌト/゚クスポヌトをトランスパむルする必芁がありたす

@SimenB 

ナヌザヌコヌドずラむブラリコヌドの䞡方がサポヌトされるたで、むンポヌト/゚クスポヌトをトランスパむルする必芁がありたす

私たちの堎合、これたでのずころ最善の方法はこれです。すべおのパッケヌゞに/es/ dirがあるためですが、これは壊れやすく、他のプロゞェクトには適さない可胜性がありたす。

transformIgnorePatterns: ['node_modules/(?!.*?/es/.*\\.js)'],

あなたが蚀ったように、Jestはtype: moduleにもかかわらず、倉換なしでそれらのパッケヌゞを取埗したせん。

ナヌザヌコヌドずラむブラリコヌドの䞡方がサポヌトされるたで、むンポヌト/゚クスポヌトをトランスパむルする必芁がありたす

これに関する倧たかなスケゞュヌルはありたすか
ノヌド14リリヌスから

珟圚の実装は、ナニバヌサルJavaScriptぞの道を開くESMモゞュヌルを䜜成するための将来の蚌明モデルを提䟛するず私たちは信じおいたす。 詳现に぀いおは、ドキュメントをご芧ください。

Node.jsでのESMの実装はただ実隓段階ですが、Node.jsでESMを「安定」ず呌ぶこずができるようになり぀぀あるず確信しおいたす。 譊告を取り陀くこずは、その方向ぞの倧きな䞀歩です。

そのため、commonJSを䜿甚しおNPMパッケヌゞJESTテストフレヌムワヌクを実装するテストで消費される可胜性がありたすをずっず長く゚クスポヌトするこずには消極的です。

Jest25.4から実隓版を出荷しおいたす。 25.5にはかなりの数のバグ修正がありたすが、それでも本来あるべき堎所にはありたせん。 9430で進捗状況を確認できたす

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡