standard-things / esm

Tomorrow's ECMAScript modules today!
Other
5.26k stars 146 forks source link

Need documentation about prefixing global variables into the namespace `_.g.` #865

Open mpyw opened 4 years ago

mpyw commented 4 years ago

Original issue in Nuxt.js repository:

Currently we have the following tests:

esm/compiler-tests.mjs at a3b8290074ccd2a708ed9b985a2f89d4f4cdd026 · standard-things/esm

it("should transform `console` references and calls with identifier arguments", () => {
  const lines = [
    "console",
    "console.a(b)",
    'console.a("b", c)',
    'console["a"](b)',
    "new console.Console(a)",
    "class C extends console.Console {}",
    "const a = { console }",
    "const a = { [console]: console }",
    "const a = { console() { console } }",
    "const a = () => console"
  ]

  const compiled = [
    "_.g.console",
    "_.g.console.a(b)",
    '_.g.console.a("b", c)',
    '_.g.console["a"](b)',
    "new _.g.console.Console(a)",
    "class C extends _.g.console.Console {}",
    "const a = { console:_.g.console }",
    "const a = { [_.g.console]: _.g.console }",
    "const a = { console() { _.g.console } }",
    "const a = () => _.g.console"
  ]

  lines.forEach((line, index) => {
    const code = [
      'import a from "a"',
      line
    ].join("\n")

    for (const sourceType of modernTypes) {
      const result = Compiler.compile(code, { sourceType })
      const actual = result.code.split("\n").pop()

      assert.strictEqual(actual, compiled[index])
    }
  })
})

However, there are no mentions on the documentation. It confuses developers. We need to explain the correct esm() function usage.