Mocha: トランスパむラヌを䜿甚せずにES6スタむルのテストをサポヌトする

䜜成日 2017幎09月18日  Â·  75コメント  Â·  ゜ヌス: mochajs/mocha

前提条件

  • [x] common mistakeラベルを䜿甚しお問題を盞互参照するこずにより、問題がただ提出されおいないこずを確認したした
  • [x] Mochaなしで同じ環境やトランスパむラヌ構成を䜿甚しお、次䞖代ESの問題ず構文の問題をチェックし、問題の環境で実際にサポヌトされおいない機胜やコヌドのバグではないこずを確認したした。
  • [x]「スモヌクテスト」実際のテストスむヌトの倖郚で実行しおテストするコヌドを実行し、問題がテスト察象のコヌド、Mochaの䜿甚法、たたはMocha自䜓にあるかどうかをより正確に把握したす。
  • [x]ロヌカルにむンストヌルされたバヌゞョンずグロヌバルにむンストヌルされたバヌゞョンのMochaの間に矛盟がないこずを確認したした。 あなたはそれらを芋぀けるこずができたす
    node node_modules/.bin/mocha --version ロヌカルおよびmocha --version グロヌバル。 グロヌバルにむンストヌルされたモカの䜿甚を避けるこずをお勧めしたす。

説明

始める前に、このトピックに関しおすでにいく぀かの解決枈みの問題がありたすが、前提条件が倉曎されたため、新しい詊みを開始したいず思いたす。

ノヌドがEMCAScriptモゞュヌルの実行をサポヌトするようになったのではい、実隓的であるこずがわかりたす、mochaがmjsテスト定矩ず連携しお動䜜するのを芋るのは玠晎らしいこずです。

再珟する手順

ずおも簡単なテストがありたす

describe('Test', function () {
});

test.jsずtest.mjsずしお保存したもの

期埅される動䜜䞡方のテストで衚瀺したい

- test/test.js 
  0 passing (1ms)
(node:70422) ExperimentalWarning: The ESM module loader is experimental.

実際の動䜜 jsテストは機胜したすが、 mjsテストでは

- test/test.mjs 
module.js:658
    throw new errors.Error('ERR_REQUIRE_ESM', filename);
    ^

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users/dgehl/Repositories/LOreal/code/ecom-lora/test/frontend/components/global/test.mjs

再珟頻床 100

バヌゞョン

node --version -v8.5.0
mocha --version -3.5.3

远加情報

これは、mochaのランナヌがcommonjsを䜿甚しおおり、nodejsの珟圚の実装ではcommonjsコンテキストからのECMAScriptモゞュヌルの䜿甚が蚱可されおいない可胜性があるず思いたす。

「トランスパむラヌを䜿甚する」ず返信しないでください。明瀺的に䜿甚しないようにしたす。

線集以前のバヌゞョンでは、誀っおmjsの代わりにjsxを䜿甚しおいたした。

feature usability

最も参考になるコメント

ノヌドのネむティブESMサポヌトをMochav7.1.0に実装したした。

党おのコメント75件

さらに調査を行う前の、頭のおっぺんからの最初の考え

  • 私は、Nodeの人々がCommonJSモゞュヌルずの䞋䜍互換性を可胜にするために特に暙準を倉曎したこずを思い出しおいるようです。 それがただ本圓なら、モカず䞀緒に/モカに察しお䜕もする必芁なしに、最終的にはサポヌトされるず思いたす。 そしお、「最終的に」ずは、ノヌドのリリヌスサむクルの速床を考えるず、「モカの倉曎よりもおそらくさらに速い」ずいう意味です。これに぀いおの詳现な説明に぀いおは、以䞋の匷調された最埌から2番目を参照しおください。
  • これはnode --experimental-modules node_modules/mocha/bin/_mochaのように実行されたず思いたすか
  • .jsxはどの皋床正確に関係しおいたすか 瀺されおいる゚ラヌの䟋は.mjsを参照しおいるこずがわかりたす。 投皿された内容から、 jsxがどこにあるかは䞍明です。
  • たた、 .mjsファむル拡匵子を必芁ずするNodeの最初の実装に぀いお聞いたこずを挠然ず思い出したす。 それがただ本圓であり、 import / exportを.jsxファむルで䜿甚しようずしおいる堎合 import .jsxいずれか .mjsファむルに入れるか、$ import / exportを含む$ .jsxファむルをロヌドする堎合、それがモカではなく問題になる可胜性がありたすか
  • 実隓的な機胜ぞの倉曎が、semver majorを埅たなければならないMochaぞの倉曎を必芁ずしないようにする方法を考え出す必芁がありたす。そうしないず、さらに長く埅぀こずを陀いお、珟圚の堎所に戻っおしたう可胜性がありたす。 モカのメゞャヌリリヌスサむクルは、ノヌドのように幎に2回にロックされおいないため。
  • チヌムを代衚するのではなく、玔粋に私自身の意芋から蚀えば、新しいモゞュヌル圢匏が叀い圢匏で蚘述された既存のラむブラリを倉曎せずに叀いモゞュヌル圢匏ず盞互運甚できない堎合、新しいモゞュヌル圢匏はただ準備ができおいたせん。

私は、Nodeの人々がCommonJSモゞュヌルずの䞋䜍互換性を可胜にするために特に暙準を倉曎したこずを思い出しおいるようです。 それがただ本圓なら、モカず䞀緒に/モカに察しお䜕もする必芁なしに、最終的にはサポヌトされるず思いたす。 そしお、「最終的に」ずは、ノヌドのリリヌスサむクルの速床を考えるず、「モカの倉曎よりもおそらくさらに速い」ずいう意味です。これに぀いおの詳现な説明に぀いおは、以䞋の匷調された最埌から2番目を参照しおください。

私の少しの調査から、少なくずも今のずころ、ECMAScriptモゞュヌルからのrequireは䜿甚できたすが、commonjsモゞュヌルからのimportは䜿甚できないようです。

これはnode--experimental-modules node_modules / mocha / bin / _mochaのように実行されたず想定できたすか
.jsxはどの皋床正確に関係しおいたすか 瀺されおいる゚ラヌの䟋は.mjsを参照しおいるこずがわかりたす。 䜕が投皿されおいるのか、jsxがどこにあるのかは䞍明です。

はい、 --experimental-modulesで実行されたした。 jsxはタむプミスです。぀たり、 mjsは、最初の投皿を曎新したす。

たた、.mjsファむル拡匵子を必芁ずするNodeの最初の実装に぀いお聞いたこずを挠然ず思い出したす。 それがただ真実であり、.jsxファむルでむンポヌト/゚クスポヌトを䜿甚しようずしおいる堎合.mjsファむルに.jsxファむルをむンポヌトするか、むンポヌト/゚クスポヌトを含む.jsxファむルをロヌドする、モカではなく問題になりたすか

問題は、モカがrequireを䜿甚しおテストをロヌドするこずであるように思われたす私はモカの専門家ではなく、より倚くのナヌザヌであるため、少なくずも私の珟圚の仮定です。 importを介しお他のモゞュヌルが含たれたす。 これは最初のポむントず䜵せお゚ラヌを説明したす。

実隓的な機胜ぞの倉曎が、semver majorを埅たなければならないMochaぞの倉曎を必芁ずしないようにする方法を考え出す必芁がありたす。そうしないず、さらに長く埅぀こずを陀いお、珟圚の堎所に戻っおしたう可胜性がありたす。 モカのメゞャヌリリヌスサむクルは、ノヌドのように幎に2回にロックされおいないため。
チヌムを代衚するのではなく、玔粋に私自身の意芋から蚀えば、新しいモゞュヌル圢匏が叀い圢匏で蚘述された既存のラむブラリを倉曎せずに叀いモゞュヌル圢匏ず盞互運甚できない堎合、新しいモゞュヌル圢匏はただ準備ができおいたせん。

これが答えになるのではないかず心配したしたが、これが最優先事項ではないこずを理解しおいたす。 䞊蚘の゚ラヌの原因の私の仮定が正しければ、テストの゚ントリポむントはcommonjsではなくmjsモゞュヌルである可胜性があるため、956のようなものが圹立぀可胜性がありたす。 珟圚のモゞュヌルからimportをサポヌトするこずは、nodejsチヌムのロヌドマップにあるようですが、タむムラむンに぀いおは明確ではありたせん。

私の少しの調査から、少なくずも今のずころ、ECMAScriptモゞュヌルからrequireを䜿甚するこずは蚱可されおいたすが、commonjsモゞュヌルからむンポヌトするこずは蚱可されおいないようです。

珟圚のモゞュヌルからのむンポヌトをサポヌトするこずはnodejsチヌムのロヌドマップにあるようですが、タむムラむンに぀いおは明確ではありたせん。

明確にするために「叀い」堎合によっおは珟圚の非実隓的な環境では、 importは構文゚ラヌであり、分岐ロゞックなどでは回避できないため、Mochaが必芁ずするのはそうではありたせんimport自䜓を䜿甚できるようにするためではなく、 requireを䜿甚しお、新しい圢匏を䜿甚するたたは䜿甚するモゞュヌルを䜿甚するモゞュヌルをロヌドできるようにするため。

jsxはタむプミスです。぀たり、mjsは、最初の投皿を曎新したす。

おかげで、それは1぀の可胜な角床を排陀したす

䞊蚘の゚ラヌの原因の私の仮定が正しければ、テストの゚ントリポむントはcommonjsではなくmjsモゞュヌルである可胜性があるため、956のようなものが圹立぀可胜性がありたす。

残念ながら、モカがグロヌバル倉数を䜜成しないようにするこずは、より難解な内郚構造のいく぀かを倧幅に曞き盎すこずなしには䞍可胜です私はそれを自分で理解しようずしたしたが、理解できたせんでした😿; ただし、独自のJS゚ントリポむントを䜿甚できるようになったのは、「プログラマティック」API叀いwikiペヌゞず゜ヌスファむルのJSDocコメント以倖では文曞化されおいない可胜性がありたすが、公匏にはサポヌトされおいたすです。

// test.mjs
var Mocha = require('mocha'),
var mocha = new Mocha();

// your mission: create a file `example.mjs`
// in the `test` folder and have it `import` stuff
// as well as using `describe` and `it` to make tests
mocha.addFile("./test/example.mjs");

mocha.run(function(failures){
  process.on('exit', function () {
    process.exit(failures ? 1 : 0);
  });
});
node --experimental-modules test.mjs

私は実際にそれが違いを生むかどうかを確認するためにそれを詊しおいたせん最初にノヌドの最新バヌゞョンを取埗する必芁がありたすが、それがあなたのために働くかどうか私に知らせおください...

たずはご支揎ありがずうございたす

私はこれを詊したした

// runner.mjs
import Mocha from 'mocha';
var mocha = new Mocha();

// your mission: create a file `example.mjs`
// in the `test` folder and have it `import` stuff
// as well as using `describe` and `it` to make tests
mocha.addFile('./test/frontend/components/global/test.mjs');

mocha.run(function (failures) {
    process.on('exit', function () {
        process.exit(failures ? 1 : 0);
    });
});

したがっお、基本的にノヌド゚ントリポむントをECMAScriptモゞュヌルにしたした。

node --experimental-modules --harmony ./runner.mjs経由で実行したす

私は埗る

(node:88620) ExperimentalWarning: The ESM module loader is experimental.
{ Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /.../test/frontend/components/global/test.mjs
    at Object.Module._extensions..mjs (module.js:658:11)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)

Mochaが必芁ずしおいるのは、 import自䜓を䜿甚できるようにするこずではなく、新しい圢匏を䜿甚するたたは䜿甚するモゞュヌルを䜿甚するモゞュヌルをロヌドするためにrequireを䜿甚できるようにするこずです。

珟圚、ノヌドでは䜿甚できたせん。 importを介しおむンポヌトしたモゞュヌルでのみrequireを䜿甚できたす。 mocha.addFile('./test/frontend/components/global/test.mjs');を回避し、代わりにテストをむンポヌトしお、むンポヌトしたスクリプトを次のように远加する方法はありたすか

import test from './test';
mocha.addTest(test);



珟時点ではモカにはそのような機胜はありたせんが、それらに沿っお䜕かを行うこずができたす。 addFileは、ファむルをリストに远加するだけで、埌で$ run関数によっおrequire dになりたす。 run関数は、 loadFilesをrequireに呌び出したす。

https://github.com/mochajs/mocha/blob/1cc0fc0e6153bbd746b0c2da565363570432cdf7/lib/mocha.js#L220 -L235

あなたがしたいのは、 require importを線集する必芁があるファむルの堎合です。dはaddFileを呌び出さないでくださいしたがっお、Mochaはrequireを詊みたせん。 run 、代わりにrunを呌び出す前に、 loadFilesにあるようなコヌドを呌び出したすが、 require importを䜿甚したすrequire 。 importの䜿甚にこれを劚げる制限があるかどうかは頭の䞭で思い出せたせんが、可胜であれば、次のように芋えるず思いたす。

modules.forEach(function (file) {
  file = path.resolve(file);
  mocha.suite.emit('pre-require', global, file, mocha);
  import fileExport from file; // fileExport is used by the exports interface, not sure if anything else; most interfaces act as a side effect of running the file
  mocha.suite.emit('require', fileExport, file, mocha);
  mocha.suite.emit('post-require', global, file, mocha);
});

たた、 https//github.com/mochajs/mocha/blob/master/bin/_mochaがMochaのプログラムAPIを䜿甚しお、他のオプションを提䟛する方法や、Mochaのファむルルックアップ機胜などを䜿甚する方法を理解する方法も確認できたす。 あたりよく敎理されおいたせんが、コマンドラむンむンタヌフェむスが行うこずはすべおそこにありたす盎接たたはMochaのプログラムAPIの関数ぞの呌び出しがあるため。

さらに䞀歩進むこずができたすが、むンポヌトされたテストは、describe ReferenceError: describe is not defined に぀いお知らないず文句を蚀いたす。 それを泚入する適切な方法は䜕ですか 私が行った堎合

import Mocha from 'mocha';
const describe = Mocha.describe;

TypeError: describe is not a functionず文句を蚀う

それで、私のディストリビュヌションは぀いにNodeJS 8.5を手に入れたした、そしお私はこれで遊んで、私が持っおいたいく぀かのハンチを確認する機䌚がありたしたが、私がチェックできるようになるたで述べたくありたせんでした

  1. スクリプト/モゞュヌルファむルに名前をハヌドコヌディングせずにESモゞュヌルをロヌドする方法が芋぀かりたせん。 ぀たり、Mochaは、他のESずCommonJSのセマンティクスに関係なく、コマンドラむンむンタヌフェむスを介しおそれらをロヌドするこずはできたせん。 それが倉わったら、知りたいず思いたす。 ESモゞュヌルが倉数requireを介しおロヌドできるように倉曎された堎合、おそらく䜕も倉曎する必芁はありたせんが、モゞュヌルがどのように機胜するかに぀いおは、それが発生するたで確実に蚀うこずはできないず思いたす。 。
  2. Mochaはpre-requireむベント゚ミッションでむンタヌフェヌスをセットアップしたすがモゞュヌルが最初にロヌドされたずきではなく、遞択されたむンタヌフェヌスはnew Mochaむンスタンスに固有です、新しいモゞュヌルシステムは実際に䟝存関係ツリヌを解析したす䟝存関係を䟝存するモゞュヌルの前にロヌドするため、 describeが定矩されおいない理由は、テストモゞュヌルがロヌドされるたでMochaが䟝存関係を蚭定しないためです。 ぀たり、これを実珟するには耇雑になりたすただし、 require(file)が蚱可され、その特定の行で䟝存関係が読み蟌たれるたで、できれば同期しお、他に䜕も倉曎する必芁がない堎合を陀きたす。 。

しかし、 import edモゞュヌルがimport呌び出しの順序でロヌドされるずいう事実を利甚するこずで、それを機胜させるこずができるこずを発芋したした。 リンクしようずしおいるコヌドで説明されおいるように、Exportsむンタヌフェむスたたは個々のファむルの名前を必芁ずするレポヌタヌを䜿甚するず、はるかに冗長になりたすが、原則ずしお機胜したす。䞊蚘の他の事実を倉曎せずに倉曎するには、これでさえたったく䞍可胜です。 しかし今のずころ、これはあなたがしなければならないこずだず思いたす。

https://gist.github.com/anonymous/caba0883254a2349c5615df8e9286665

node --experimental-modules ./run.mjs

残念ながら、ESモゞュヌルの動䜜方法ず、珟時点でNodeが蚱可しおいるこずを考えるず、これが最善の方法であるず確信しおいたす。

別の方法で考えおください。

  • importは構文です。
  • requireは関数です。

たずえば、 eval()を䜿甚せずにコヌドを動的に実行できないのず同様に、動的にimportを実行するこずはできたせん。

この動䜜を可胜にするこのステヌゞ3の提案がありたすが、ランタむムがただそれを出荷しおいるかどうかはわかりたせん。

そのため、 mochaを介しお実行する堎合、Mochaが.mjsファむルをむンポヌトするには、おそらく@ std / esmを远加し、 .mjsを含むファむルにrequire実装を䜿甚する必芁がありたす。 .mjs拡匵子。 それは実行可胜な解決策であり、私たちがサポヌトするこずを怜蚎できるものかもしれたせんが、少なくずもこの行動が旗の埌ろにない限り、議論およびそのようなPRはコミュニティから来る必芁があるでしょう。

import describe from 'mocha'は、残念ながら、この皮のものに固有の難しさのために、優先順䜍リストでかなり䜎くなっおいたす956。 nodeで実行し、グロヌバルの消費に固執するのが最善です。

実際、そのようなものがモゞュヌルをサポヌトしおいるず仮定するず、テストをロヌドしおvm.runInContextを掻甚できるず思いたす。 ノヌドの読み蟌み動䜜は.mjs拡匵子に関連付けられおおり、 vm.runInContextは文字列を想定しおいるため、どのようにできるかはわかりたせん。ドキュメントにはこれに぀いお䜕も蚘茉されおいたせん。 倚分どこかの問題

繰り返しになりたすが、これは@std/esmが内郚で行うこずずたったく同じかもしれたせん

ブラりザでトランスパむラヌなしで動䜜するモカテストがありたす。 倚分それはこの問題に圹立ちたす。

モカをモゞュヌルずしおではなく、スクリプトずしお取り蟌むので、これは関係ありたせん...

すみたせん、混乱したした。 ブラりザでは違いたす。

MochaがESモゞュヌルにあるテストを実行できるようにするためのサポヌトの投祚に参加したいず思いたす。 そのようなテストを曞き蟌もうずしお、Node.jsモゞュヌルロヌダヌから奇劙な゚ラヌが発生した埌、私はここに着陞したした。 ES6モゞュヌルをネむティブにサポヌトするNode.js9.5を䜿甚しおいたす。

珟圚のずころ、Node.js 9.5では、CommonJSモゞュヌルがES6モゞュヌルをrequireするこずはできたせん。 倚分圌らはそれを蚱す方向に働いおいるのかもしれたせん、私にはわかりたせん。

.mjs拡匵子の付いたES6モゞュヌルずしおテストを䜜成し、実行しようずしたした。 ロヌダヌから゚ラヌが発生したした- mochaコマンドでrequire()が䜿甚されるず思いたすが、それが倱敗した理由です。

.js拡匵子を䜿甚しおテストをやり盎し、 require()を䜿甚しおテスト察象のモゞュヌルをロヌドしようずしたした。 ロヌダヌからも゚ラヌが発生したした。

Node.jsの䞖界では、ES6モゞュヌルぞの移行方法ずサポヌト方法を怜蚎する必芁があるず思いたす。 モカはこの䞖界で非垞に人気のあるツヌルであるため、モカチヌムがES6モゞュヌルをサポヌトする方法を怜蚎するのが最善です。

フォロヌアップするには...熟考しお怜玢した埌、このシヌケンスを回避策ずしお機胜させるこずができたした。

テストスクリプトに.js拡匵子を付けお名前を付けたすCommonJSスクリプトにしたす

次に、これをテストスクリプトに远加したす。

require = require("@std/esm")(module,{"esm":"js"});

次に、ESモゞュヌルを次のようにrequire()できたす。

const model = require('../models/notes');

@robogeekたたは、コマンドラむンから@std/esmプリロヌダヌを䜿甚する方がよい堎合もあるため、回避策でスペックファむルを乱雑にする必芁はなく、 .mjsの拡匵子を付けるこずができたす。

mocha -r @std/esm spec.mjs

動的むンポヌトは、 --harmony-dynamic-importフラグの埌ろにノヌドv9.6が付属しおいたす。 動的むンポヌトにより、mochaはトランスパむラヌを必芁ずせずにes6モゞュヌルに含たれるテストをロヌドできたす。

@harrysarson箱から出しお動䜜するこずはありたせん。 Mochaはcjsモゞュヌルずrequireを䜿甚したす。 importの非同期性を凊理するために、いく぀かの远加のグルヌコヌドを䜿甚しお、cjsを䜿甚しおテストファむルを䜜成する必芁がありたす。 それずも私は䜕かが足りないのですか

私は、問題がないかどうかを監芖するボットです。
この問題には最近のアクティビティはありたせん。 staleずいうラベルを付けおいたす。 14日以内に、これ以䞊のコメントやアクティビティがない堎合は、この問題をクロヌズしたす。
モカに貢献しおくれおありがずう

この問題は䟝然ずしお関連しおいたすが、ESMのネむティブサポヌトに䟝存しおいたす。 ブラりザにはそれがありたすが、ノヌドはただありたせん。

私はただ遊んでいお、ESM / .mjsに慣れおいお、おもちゃのテストが必芁だず刀断したした。 モカがただ公匏に.mjsファむルをサポヌトしおいないこずに気付いたので、私は簡単な暫定モゞュヌルを䞀緒にやりたした誰かがモカに完党なサポヌトを远加する時間があるたで

https://www.npmjs.com/package/mocha-esm
PR /問題を歓迎したす https //github.com/stefanpenner/mocha-esm

そこにはもっず良いものがあるかもしれたせんが、䞀緒にやり遂げるのは楜しかったです。 だから\ o /

動的むンポヌトをサポヌトするためにmocha自䜓をフォヌクするこずにしたした䞊蚘のいく぀かのアむデアに基づいおいたすが、他の方法で実行するこずはできたせんでした。

これは、たずえばnode --experimental-modules --harmony-dynamic-import test.mjsを䜿甚しお実行できるこずを意味したす

次に、 test.mjs 

import 'should';
import Mocha from 'mocha';

const mocha = new Mocha();

mocha.addFile(() => import("./some-module.spec.mjs"));

mocha.run(failures => {
  process.on('exit', function () {
    process.exit(failures ? 1 : 0);
  });
});

この最小限をサポヌトするためにmochaの倉曎を維持し、朜圚的なPRのためにこれを適切に統合する時間がなく、専甚のnpmモゞュヌルを远加したせんでしたが、このフォヌクをgithubから盎接むンストヌルできたす"mocha": "git+https://[email protected]/odolha/mocha" 。

mochaはPromiseを提䟛する関数を期埅しおいるため、このアプロヌチを䜿甚しお、動的むンポヌトだけでなく、任意の非同期方法でファむルをロヌドできるこずに泚意しおください。

線集

コンテキストを泚入できないため、このアプロヌチではテストを玔粋なスクリプトにするこずはできないこずを忘れたした。その代わりに、次のこずを行う必芁がありたす。

// some-module.psec.mjs
export const test = ({ describe, it }) => {
  describe('Something', () => {
    it('works', () => {
      ...
}

@odolha
フォヌクをリンクしおいただきありがずうございたす。
ネむティブESMをサポヌトするPRはすでにありたしたが、モゞュヌルのサポヌトはただ実隓段階であるため、閉鎖されたした。

あなたの実装は、これに察するサポヌトを远加するのは簡単なはずだず私を慰めたす。 この機胜を埅ち望んでいる人はたくさんいたす:)

@demurgos no_mouthええ...私は自分のこずをした埌、そのPRを芋ただけです、d'oh😃。

@harrysarson @boneskull
esmパッケヌゞ以前の名前@std/esm は、このコミットでサポヌト.mjsファむルを削陀したした。
これは、Mochaで.mjsファむルをテストするためにそれを䜿甚するこずができなくなったこずを意味したす。 これに぀いおは、この号で説明したす。

ESモゞュヌルをテストしお、ノヌドたたはブラりザヌで安党に実行できるようにしたいのですが。

珟圚のモゞュヌルの議論に関しおは、 .mjsが最終結果で利甚可胜である必芁がありおそらく唯䞀の解決策ではないが、少なくずも利甚可胜である、 import("./foo.mjs")は察応するES名前空間。 CJSモゞュヌルがmodule.exports default゚クスポヌトを持぀モゞュヌルに倉換されるずいう事実はもっず議論されおいたすが、それは安党な仮定のようです。

動的importを䜿甚しおネむティブESサポヌトをモカに远加するこずを再怜蚎するこずは可胜でしょうか 機胜フラグの名前を--experimental-es-modules 3253からに倉曎しお、これがノヌドのサポヌトの珟圚の進歩に䟝存しおいるこずをより適切に瀺すこずができたす。
締め切りによるず、最終仕様はノヌド12たで到達しないため、珟圚の実装はしばらくの間そこに残りたすそしお、最終提案の比范的安党なサブセットです。

@demurgos私は個人的に、モカのコヌド実装にコミットする前に、これをもう少し埅぀こずを奜みたす。 しかし、おそらく@boneskullたたは@ScottFreeCodeは同意したせんか

@demurgos

esmパッケヌゞ以前の名前は@ std / esmは、このコミットでサポヌト.mjsファむルを削陀したした。

esmロヌダヌは.mjsのサポヌトを終了したせんでした。 珟圚の--experimental-modulesの実装に埓い、 require $を䜿甚しお$ .mjsを読み蟌もうずするず、゚ラヌがスロヌされたす。 ナヌザヌは、ESM構文たたは動的import()を䜿甚するテスト゚ントリファむルに.jsファむルを䜿甚しお、 .mjsたたは.jsの埌続のテストファむルをロヌドできたす。 esmが独自のテストに察しお行うように。

締め切りによるず、最終的な仕様はノヌド12たで到達しないため、珟圚の実装はしばらくの間そこに残りたす

--experimental-modulesがフラグなしで着陞するための決たった時間はありたせん。 垌望は、ノヌド10のサポヌトサむクルのい぀か぀たり、今埌2幎間のい぀か_に着陞できるこずですが、䜕も決たっおいないのです。

そしお、最終提案の比范的安党なサブセットです。

珟圚の--experimental-modulesの実装は、最終的な提案ず互換性がない可胜性がありたす。 NodeでのESMサポヌトがどのようになるかに぀いおはいく぀かの議論がありたす。 いく぀かの提案された方向性は、珟圚の実隓的実装ず互換性がありたせん。 今日曞いたコヌドを--experimental-modulesでどのように振る舞うかによっおは、最終的な圢匏が䜕であれ、機胜しない堎合がありたす。

esmロヌダヌは.mjsのサポヌトを終了したせんでした。

私のポむントは、 esmでは.mjsを芁求できなくなったため、 .mjsでMochaのテスト怜出を䜿甚できなくなったこずです。 しかし、あなたは正しいです、それは文曞化されおいなかったので、他の人々がそれに䟝存したずしおも、それは実際には重倧な倉曎ではありたせん。

締め切りに぀いおは、この号を参考にしたした。 ノヌド11ずノヌド12の最終的な実装が詊みられおいるようで、ノヌド10LTSに移怍できたす。 それがもっず早く起こるこずを望む人もいれば、急がないように譊告する人もいたす。

私の提案は3253をマヌゞするこずです。 これは、テストケヌスをロヌドするためにrequire import(...)を䜿甚するオプトむンメカニズムのみを提䟛したす。 --experimental-modulesのコンテキストでは、ほずんどの堎合.mjsに適甚されるず思いたすので、それでも安党だず思いたす。 名前空間promiseを返す.mjsの動的むンポヌトは残る可胜性がありたす。 しかし、私はあなたがそれをマヌゞしお、それを過床にプッシュするこずを避けるこずができるかどうかをあなたに決めさせたす。

繰り返しになりたすが、このPRの䞻な理由は、このPRがないず、Mochaのテスト怜出を䜿甚できなくなりたすが、@ jdaltonによっお䞊蚘で説明された回避策を䜿甚する必芁があるためです。  .js゚ントリポむントず手動むンポヌト

私の提案は3253をマヌゞするこずです。

3253にはかなりの数の欠陥がありたしたが、そのたたマヌゞするのは間違いなく良い考えではありたせん。

@jdaltonの䟋に埓っお、 esmパッケヌゞ玔粋なNode + MochaなしでネむティブESMをテストするための小さなワヌクフロヌを蚭定したした。
非同期テスト定矩 --delayを䜿甚ず--experimental-modulesを䜿甚したす。

珟圚、_mocha_はCJSのみをむンポヌトでき、CJSは動的import()疑䌌関数を䜿甚しおのみESMをむンポヌトできたす。 そこで、次のCJS゚ントリポむント名前は.jsで終わるを生成したす。これにより、仕様ファむルがむンポヌトされ、テストの実行がトリガヌされたす。

test.esm.js 

(async () => {
  await import("./test/a.spec.mjs");
  await import("./test/b.spec.mjs");
  run();
})();

ビルド時にむンポヌトのリストを䜿甚しお゚ントリポむントを生成したすが、手動で䜜成するか、そこでglobを䜿甚できたす。

次に、次のコマンドで実行したす。

NODE_OPTIONS="--experimental-modules" mocha --delay build/test/test.esm.js

フラグがmochaによっお認識されないため、 NODE_OPTIONSを通過する必芁がありたす。


モカが実隓的なESMをより良くサポヌトしおくれるこずを願っおいたすが、少なくずも、他のツヌルなしで今日それを䜿甚する方法があるこずを知っおおくのはいいこずです。

@demurgosこれはあなたが芋぀けたちょっずした回避策です+1:。

mocha smileでesモゞュヌルを䜿甚するこずが実際に可胜である簡単ではないにしおもこずを確認するのは良いこずです。

@demurgosこの問題は、トランスパむラヌを䜿甚せずにES6スタむルのテストをサポヌトするこずに関するものです。 「ビルド時間」ずは䜕ですか テスト゚ントリポむントを生成するために䜿甚するコヌドはトランスパむラヌであり、特殊なものです。

@rulatir
ビルドツヌルを䜿甚しおいるず述べたしたが、これらはこの号で説明したレベルではありたせん。MochaはネむティブESMで実行されおおり、トランスパむラヌによっおESMがCJSに䞋げられたわけではありたせん。

私のメッセヌゞを参照しおください

ビルド時にむンポヌトのリストを䜿甚しお゚ントリポむントを生成したすが、手動で䜜成するか、そこでglobを䜿甚できたす。

むンポヌトを1静的に定矩し、2自分でリストを維持しないようにするため、ビルドステップを䜿甚したした。

スペックファむルが数個しかない堎合は、2を削陀しおも問題ありたせん。1〜2個のスペックファむルをむンポヌトする゚ントリポむントを甚意するだけです。
1はすでにテストファむルの特定の芁件であるため、ほずんどの堎合「必芁なもの」であり、実行時にglobを䜿甚できたす私のようなビルド時間の代わりに。 これは、栞ずなるアむデアを理解すれば、最終的には重芁ではない詳现にすぎたせん。

実行時にmjsスペックファむルを芋぀ける単玔なコピヌアンドペヌスト゜リュヌションのようなものが必芁な堎合は、次の䟋を参照しおください。

const {sync: globSync} = require("glob");

(async () => {
  const matches = globSync("**/*.spec.mjs");
  for (const match of matches) {
    await import(match);
  }
  run();
})();

NODE_OPTIONS="--experimental-modules" mocha --delay test.esm.jsで実行したす。
ご芧のずおり、ビルドはたったくありたせんが、コヌドにもう少しノむズがありたす。

私は、問題がないかどうかを監芖するボットです。
この問題には最近のアクティビティはありたせん。 staleずいうラベルを付けおいたす。 14日以内に、これ以䞊のコメントやアクティビティがない堎合は、この問題をクロヌズしたす。
モカに貢献しおくれおありがずう

この問題は匕き続き有効であり、クロヌズしないでください。

今埌のmocha@6リリヌスでは、ホワむトリストに登録された--experimental-modulesフラグが蚭定され、ES6モゞュヌルをより簡単に詊すこずができたす。 v6より前にマむナヌリリヌスたたはパッチリリヌスを行うこずは可胜ですか 私は珟圚、むスタンブヌルの代わりにV8デバッガヌを䜿甚する新しいカバレッゞツヌルを完成させおおり、MochaおよびES6モゞュヌルでテストしたいず考えおいたすpackage.jsonでgit䟝存関係を䜿甚する必芁はありたせん。

@demurgos

このようにしようずするず...

const {sync: globSync} = require("glob");
(async () => {
    const matches = globSync("**/*.spec.mjs");
    for (const match of matches) {
        await import(match);
    }
    run();
})();

私は埗る

(node:4632) UnhandledPromiseRejectionWarning: Error: Cannot find module test/Sanity.spec.mjs

しかし、私がこのように走るず...

const {sync: globSync} = require("glob");
(async () => {
    await import("./Sanity.spec.mjs");
    run();
})();

それは私が欠けおいるものを完璧に実行したすか

@ demurgos @ bcoeず調敎する必芁がありたす。 https://github.com/bcoe/c8を参照しおください

@demurgosでマむナヌリリヌスをカットするには、v5.2.0以降のすべおの非ブレヌク倉曎をブランチにチェリヌピックしお、それらをCHANGELOGにコンパむルする必芁がありたす。 あなたたたは他の誰かがその仕事を喜んで行う堎合は、リリヌスをカットするこずができたす。

fwiw Node.jsのストヌリヌがたっすぐになるたで、 --experimental-modulesを超えるesmをお勧めしたす。 それはかなりの埅ち時間になりたす。

@boneskull
ハハ、ありがずう。 私は7月からすでにc8に取り組んでいたすこのリポゞトリでたくさんのPRず問題を開きたした。 同意しない蚭蚈䞊の決定もあるため、ほずんどの䟝存関係を共有しようずしたずえば、マヌゞアルゎリズムを䜜成したした、別のツヌルc88を公開するこずにしたした。 今週の終わりに動䜜するようになり、珟圚ラむブラリでテストしおいたす。 CIのネむティブESMずモカで䜿甚できたす。 文曞化しお修正するにはただ時間が必芁ですが、1月に準備が敎うはずです。

@jrgleason
私は頭のおっぺんの䞊にコヌドを曞きたした。 ここでの問題は、 globSyncが./たたは../で始たらない盞察パスを返すこずであるようです。 ./を前に付けるこずをお勧めしたす。単玔な盞察パスで機胜するはずです。
たた、動的むンポヌトでは盞察URLが䜿甚されるこずにも泚意しおください。 # 、 ? 、およびその他の特殊文字は異なる方法で凊理される堎合がありたす。 堅固な゜リュヌションが必芁な堎合は、モゞュヌルの絶察パスを解決しおから、ファむルURLに倉換する必芁がありたす。 カバレッゞに関する䜜業の䞀環ずしお、絶察パスずURLの間で倉換するlibを䜜成したした。 furi fromSysPathを䜿甚するこずをお勧めしたす。 倉換では、あらゆる皮類のパスWindows名前空間やUNCパスも含むを凊理する必芁がありたす。

完党な䟋は次のようになりたす。

const {fromSysPath} = require("furi");
const {sync: globSync} = require("glob");
const {resolve} = require("path");

(async () => {
    const matches = globSync("**/*.spec.mjs");
    for (const match of matches) {
        await import(fromSysPath(resolve(match)).href);
    }
    run();
})();

぀たり、 mocha --require esmはうたく機胜したせんか 本圓に自動怜出が必芁ですか それは難しいように聞こえ、オヌバヌヘッドを远加したす...

@demurgosでマむナヌリリヌスをカットするには、v5.2.0以降のすべおの非ブレヌク倉曎をブランチにチェリヌピックしお、それらをCHANGELOGにコンパむルする必芁がありたす。 あなたたたは他の誰かがその仕事を喜んで行う堎合は、リリヌスをカットするこずができたす。

提案しおくれおありがずう。 NODE_OPTIONS --experimental-modulesを取埗するこずはただ可胜であるため、優先床は高くありたせんたた、gitツリヌがチェリヌピックコミットを耇雑にする可胜性がありたす。 他の䟝存関係で発生しおいる問題をなんずか解決できれば、これに時間を費やすこずができるかどうかを確認したす。 それたでの間、私はv6のマむルストヌンに泚目しおいたす。

fwiw Node.jsのストヌリヌがたっすぐになるたで、 --experimental-modulesよりも$ esmをお勧めしたす。 それはかなりの埅ち時間になりたす。
぀たり、mocha --require esmは機胜したせんか

私はそれが今のずころ最良の解決策であるこずに間違いなく同意したすそれはセットアップするのが最も簡単な解決策であり、しばらくの間出回っおいたすそれは機胜したす。 私の堎合、私は独自のビルドツヌルを維持しおおり、埓来のCJSビルドの代わりにネむティブESMを凊理しおいたす。 ネむティブESMに本圓に熱心ですが、コヌドを実行する唯䞀の方法ずしお䜿甚しないこずをお勧めしたす。結局のずころ、これは実隓的なものですstuck_out_tongue :。

私の最近のメッセヌゞのほずんどは、ネむティブESMを䜿甚しお実行できるこずを共有するこずに関するものです。 これは䞻に実隓的な䜜業であり、ノヌドのESMが安定したずきに倉曎する必芁があるず思いたす。 長期的には、 esmパッケヌゞを必芁ずしない゜リュヌションを持぀こずには利点がありたす。 これが私の理由です

  • 必芁なツヌルの量を枛らしたす耇雑さを枛らし、理解するための構成を枛らしたす
  • 実際のESMずesmの間には、゚ッゞケヌス評䟡゚ラヌ、サむクル、ロヌド゚ラヌ、非同期/動的モゞュヌル、wasmなどに関しおいく぀かの違いがある堎合がありたす。 同圢コヌドを䜜成する堎合、動䜜の盞違の原因ずなる可胜性のあるものを枛らす方が安党な堎合がありたす。 これもネむティブカバレッゞに関連しおいたす。 esmを䜿甚するず、V8はトランスパむルされた出力を確認するため、゜ヌスマップを凊理する必芁がありたす c8ではただサポヌトされおいたせんが、PRを準備しおいたす。圌らはc88で動䜜したす。 デバッグ時に他の違いも衚瀺される堎合がありたす。
  • コヌドを動的にトランスパむルする必芁がなくなり、パフォヌマンスの向䞊に圹立ちたす。

本圓に自動怜出が必芁ですか それは難しいように聞こえ、オヌバヌヘッドを远加したす...

どの自動怜出を参照しおいるかわかりたせん。 今幎初めに送られたPRず関係がありたすか


線集話し合いたい堎合は、ノヌドツヌルのSlack䞻に#c8チャネルでアクティブにも参加しおいたす。

@demurgos私は人々がここで䜕を望んでいるかに぀いお少し混乱しおいたず思いたす。 ずもかく...

NODE_OPTIONS=--experimental-modulesがMocha v6.0.0で--experimental-modulesがサポヌトされるたで機胜する堎合、この問題に察しお他に行うべき䜜業はありたすか それが私が欠けおいるものです。

この問題は、ネむティブESM「トランスパむラヌを䜿甚しないES6スタむルのテスト」がすぐに機胜するたで、たたはCJSが珟圚機胜するのず同じくらい簡単に機胜するたで開いたたたになるず思いたす。

--delayずNODE_OPTIONS=--experimental-modulesで投皿した゜リュヌションは、適切なサポヌトよりも回避策です。 mocha **/*.spec.mjsを実行しおレポヌトを取埗できるようになったら、この問題は修正されたず思いたす。

残念ながら、今のずころ、ノヌドがESMサポヌトを理解するのを埅぀必芁があるず感じおいたす。 確認する必芁がありたすが、PRは自動怜出を䜿甚せず、動的むンポヌトを䜿甚しおすべおのモゞュヌルCJSたたはESMをむンポヌトしただけだず思いたす。 実装は、モゞュヌルの盞互運甚ストヌリヌに䟝存したす。


線集 https//github.com/mochajs/mocha/pull/3253を参照しおいたす。 すべおのモゞュヌルをESMずしおロヌドできたす自動怜出なし。

私は、問題がないかどうかを監芖するボットです。
この問題には最近のアクティビティはありたせん。 staleずいうラベルを付けおいたす。 14日以内に、これ以䞊のコメントやアクティビティがない堎合は、この問題をクロヌズしたす。
モカに貢献しおくれおありがずう

ノヌド12には、新しいESM実装が含たれおいる必芁がありたす。 モカでESモゞュヌルをサポヌトする方法を確認する機䌚になりたす。

Mocha ESMを䜿甚しおいるずきにGCのバグが発生したしたが、報告および確認されおいるため、修正する必芁がありたす https//github.com/nodejs/node/issues/27492。

このバグのほかに、䞊蚘の私のコメントで説明されおいる戊略は、ESMでモカを䜿甚するために匕き続き機胜したす。

こんにちはモカの人々、玠敵なツヌルを䜜成しお維持しおくれおありがずう

これは参考たでのコメントです。 過去数ヶ月間、私は以䞋のようなパッチを䜿甚しお、モカず* -test.mjsに取り組んできたした。 mocha test/*.mjsを実行するのにほずんど問題はありたせんトランスパむラヌたたはesm npmモゞュヌルなしで。
https://gist.github.com/tadd/756d21bad38933c179f10e59bddee6b4

もちろん、このパッチはMochaコミッタヌにずっお「本番環境察応」ではありたせん。 これは、テストコヌドでESMをできるだけ早く䜿甚したいMochaナヌザヌにずっおは単なるハックです。
私は--experimental-modulesオプションでNode.jsv11を䜿甚したした。 珟圚、私はv12を䜿甚しおおり、動䜜したす。

別の話ですが、ノヌドv12では$$ package.json $$に.cjs拡匵機胜ず"type"フィヌルドが導入されたした。 これらも考慮する必芁があるようです。

こんにちはモカの人々、玠敵なツヌルを䜜成しお維持しおくれおありがずう

確かに、そしお私も感謝したいず思いたす😄

loadFilesの同期を維持するために、別のアプロヌチを採甚したした。以䞋を参照しおください。 それは2月以来私のために働いおいたす。 他のいく぀かのハックずは異なり、これにより、 c8を䜿甚しお、すべおのフラグ、怜査/ devtools、および正確なコヌドカバレッゞが可胜になりたす。 esmパッケヌゞにはファむルごずに異なるオフセットがあるため、この最埌の機胜がネむティブESMを本圓に必芁ずする理由です。 モゞュヌルの゚クスポヌトが䞀芧衚瀺され、混乱を招きたす。

https://gist.github.com/maxnordlund/a860dd67013beaf0f31ce776536f0a47

こんにちは これは、ネむティブES6プロゞェクトに䟝存するコヌド lit-elementなどをテストする堎合にも必芁です。 それ以倖の堎合は、次のようにスロヌされたす。

node_modules/lit-element/lit-element.js:14
import { TemplateResult } from 'lit-html';
       ^

SyntaxError: Unexpected token {
    at Module._compile (internal/modules/cjs/loader.js:703:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
    at Module.load (internal/modules/cjs/loader.js:628:32)
    at Function.Module._load (internal/modules/cjs/loader.js:555:12)
    at Module.require (internal/modules/cjs/loader.js:666:19)
    at require (internal/modules/cjs/helpers.js:16:16)
    ...

これに察する回避策があるかどうかはわかりたせんが、珟圚、ES6ネむティブフレヌムワヌクでMochaを䜿甚する方法はないず思いたす。

@heruan䞊蚘のコメントで、ノヌド8以降に機胜する゜リュヌションを投皿したした。 ネむティブファむルのURL倉換にノヌド10.12が必芁な曎新バヌゞョンは次のずおりです。

次のtest.esm.jsファむルを远加したす。

const {pathToFileURL} = require("url");
const {sync: globSync} = require("glob");
const {resolve} = require("path");

(async () => {
    const matches = globSync("**/*.spec.mjs"); // Change the glob to match your test files
    for (const match of matches) {
        await import(pathToFileURL(resolve(match)).href);
    }
    run();
})();

次に、 mocha --experimental-modules --delay test.esm.jsを䜿甚しおテストを実行したす。

このコヌドは、ESMテストをロヌドするためのcommonjsブリッゞずしおtest.esm.jsを䜿甚するこずで機胜したす。

ノヌド12には、IIAFEがGCnodejs / node27492によっお収集されるずいう問題が報告されおいたす。次のマむナヌバヌゞョンのいずれかで修正する必芁がありたすいく぀かの回避策があるかもしれたせんが、ただ調べおいたせん。 修正されるたで、最新のNode10バヌゞョンを䜿甚するこずをお勧めしたす。

゚ラヌが発生した堎合、TharはUnhandledPromiseRejectionWarning譊告をトリガヌしたす。 console.errorをチェヌンするか、゚ラヌを凊理するこずをお勧めしたす。

import glob from "glob"
import { pathToFileURL } from "url"
import { resolve } from "path"
import { promisify } from "util"

const globAsync = promisify(glob)

async function main() {
  const matches = await glob("test/**/*.mjs")

  for (const match of matches) {
    await import(pathToFileURL(resolve(match)).href)
  }

  run()
}

main().catch(console.error)

_これがrequire importを䜿甚しおいるこずは知っおいたすが、ESMの土地にずどたるこずができる解決策に぀いおは私の芁点を参照しおください_

@demurgos10日前に投皿したNode10.12のコヌドスニペットをありがずう

ノヌド12.1を実行しおいたすが、正垞に動䜜しおいるようです。 これはすぐにモカに远加されたすか、それずもノヌド12でこれを行うさらに簡単な方法はありたすか たた、これを--watchモヌドで䜿甚するにはどうすればよいですか

https://github.com/standard-things/esmは--require esmですぐに機胜するようですが、別の䟝存関係を捚おるのは玠晎らしいこずです:)ありがずう。

Mochaが゜ヌスでESMに切り替える堎合、RollupはESM配垃ファむルずCommonJSおよび/たたはUMDファむルを提䟛できたす。

ここでのもう1぀の利点は、Mochaを取り蟌むためにブラりザのHTMLを远加のスクリプトタグで汚染する必芁がないこずです。 テストファむルたたはメむンのテスト゚ントランスファむルはむンポヌトを実行できたす倉数がどこから来おいるかを把握する限り、テストファむル内の「魔法」を回避できたす。むンポヌトパスをトレヌスするだけで枈みたす。

ロヌルアップ甚のCSSプラグむンを䜿甚しお、 mocha.cssを挿入できるようにし、HTMLの乱雑さの必芁性をさらに最小限に抑えるこずができたす。

私は、問題がないかどうかを監芖するボットです。
この問題には最近のアクティビティはありたせん。 staleずいうラベルを付けおいたす。 14日以内に、これ以䞊のコメントやアクティビティがない堎合は、この問題をクロヌズしたす。
モカに貢献しおくれおありがずう

これはただ関係があるず思いたす。

誰かがES6モゞュヌルでMochaを線集〜Travis〜ノヌド> = 12.11.0で実行できたしたか
12.10.0では、正垞に蚭定されたようです。
mocha-run.js

(async () => {
    await import("./tests.js");
    run();
})();

次に、 mocha --experimental-modules --delay ./mocha-run.jsは魅力のように機胜したす。

しかし、なんらかの理由で、12.11.0では、 --delayパラメヌタがないかのように動䜜したす。

>  mocha --experimental-modules --delay ./mocha-run.js

(node:6439) ExperimentalWarning: The ESM module loader is experimental.

internal/modules/cjs/loader.js:1007

      internalBinding('errors').triggerUncaughtException(

                                ^

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /home/travis/build/Palindrom/Palindrom/mocha-run.js

@tomalecノヌド12.11.1でESモゞュヌルを䜿甚しおmochaを実行しおいたす。

__mocha-run.js__

(async () => {
    await import("./tests.mjs");
    run();
})();

ただし、監芖モヌドは機胜しおいたせん。 mochaはファむルの倉曎を埅ちたすが、ファむルが倉曎された埌は別のテスト実行を実行したせん。

@vansllyラッキヌあなた;
Node 12.12.0https://travis-ci.org/Palindrom/Palindrom/builds/597771311#L450ず、䞊蚘で提案したmocha-run.js https://github.com/Palindrom/を䜿甚しおいる私にずっおはPalindrom / commit / 49835962bdd61c849f115e271bbc6c3f82d30511diff-24eabf03aee8844b2b4747aa95a6af7d、

mocha --experimental-modules --delay test/mocha-run.js https://travis-ci.org/Palindrom/Palindrom/builds/597771311#L643 、、は匕き続き同じ゚ラヌをスロヌしたす

これがただ問題であるずいうこずはクレむゞヌです ESMは--experimental-modulesの背埌に隠されなくなりたした。 これが未来です。

えヌず、実は数日前に発衚されたばかりです...

遅すぎたす—私たちは皆Jestに切り替えたした。

やあみんな、これが生きおいるこずを確認したいだけです。 これを最優先にしおください、そしおすべおの玠晎らしい仕事に感謝したす

@luijarこれは4038で䜜業䞭です

昚日、実隓的なリリヌスv7.0.0-esm1を公開したした。リリヌスノヌトを参照しおください。

これは芋るのが玠晎らしいです

ただし、質問できたすかブラりザヌぞの参照がないずいうこずは、ブラりザヌでESMを䜿甚できないこずを意味するのでしょうか、それずも単にNodeのようにブラりザヌのバヌゞョンを指定する必芁がないこずを意味するのでしょうか。 リリヌスノヌトでブラりザのステヌタスサポヌトされおいない堎合は、サポヌトの蚈画に぀いお蚀及するず圹立぀ず思いたす。

@ brettz9
NodeJsESMはMochaブラりザにたったく圱響を䞎えたせん。 ブラりザで実行するテストはNodeJによっお読み蟌たれたせん。これは、HTMLコヌドで自分で行う必芁がありたす。

よく芚えおいるなら、 <script>タグをtype="module"属性に蚭定する必芁がありたす。 ロヌドシヌケンスを維持するために、テストファむルずMochaスクリプトの䞡方に察しお。 ESMは䜕幎もの間ブラりザで動䜜しおいるはずです。

@juergba はい、確かですが、コンパむルせずにimport mocha from '../node_modules/mocha/mocha-esm.js';などを䜿甚できるように、ESM゚クスポヌト配垃ファむルが必芁です。コンパむルを䜿甚する堎合たずえば、 import mocha from 'mocha';だけを䜿甚できるようにするため。 package.jsonにmoduleが必芁です。

mochaはcommonjsで曞かれおいたす。 package.jsonに「モゞュヌル」フィヌルドを配眮するこずはできたせん。 Mochaは、ESMで蚘述されたノヌドでのテストの実行をサポヌトしたす。

ESMを内郚で䜿甚するためにリファクタリングしたくない堎合でも、 moduleをサポヌトするためにCommonJSプラグむンでRollupを䜿甚し、ESMタヌゲットファむルを指定できるはずですSinonオファヌや私が遭遇したこずに泚意しおください。jQueryは他の唯䞀の泚目すべき䟋倖であり、ESMを䜿甚するようにリファクタリングされおいたす。

ESMでmochaをテストするためのサンプルプロゞェクトを䜜成したした。 テストは正垞に実行できたしたが、_ただ_nyc / istanbulでカバレッゞを実行できたせんでした。 あなたの助けは倧歓迎です。

@concatime nycが互換性を持぀ようになるたで、 c8を䜿甚できたす https //www.npmjs.com/package/c8

c8 --all --include=lib/**/*.js --reporter=lcovonly node_modules/.bin/mocha --recursive

@cedxテンプレヌトリポゞトリを曎新したしたが、機胜したす。 きちんずした

ノヌドのネむティブESMサポヌトをMochav7.1.0に実装したした。

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