swc-project / swc-node

Faster ts-node without typecheck
MIT License
1.72k stars 71 forks source link

Mocha tests for React (jsx) aren't parsed as jsx if test filename has .js extension #684

Open yairEO opened 1 year ago

yairEO commented 1 year ago

Hi, This is a clone of an issue i've opened on the main SWC repo

It might be better suited for this repo than the main SWC one.


Repo - https://github.com/yairEO/swc-js-extension-fails-with-jsx-content

Describe the bug

Hi, I am trying to convert a large project from Mocha + babel to Mocha + SWC, but get errors if the test file extension ends with .js and not .jsx. I have hundreds of files like this.

Renaming one of them makes SWC compile it correctly, but I really prefer keeping the tests files with the .js extension.

the project is based on React v16, so every component and its test file has the React import:

import React from 'react';

I would assume SWC would be smart enough to automatically know the content of the file is JSX...

Input code

No response

Config

{
    "$schema": "https://json.schemastore.org/swcrc",
    "jsc": {
      "parser": {
        "syntax": "ecmascript",
        "jsx": true,
        "dynamicImport": false,
        "privateMethod": true,
        "functionBind": false,
        "exportDefaultFrom": true,
        "exportNamespaceFrom": false,
        "decorators": true,
        "decoratorsBeforeExport": true,
        "topLevelAwait": false,
        "importMeta": false
      },
      "transform": {
        "legacyDecorator": true,
        "react": {
          "pragma": "React.createElement",
          "pragmaFrag": "React.Fragment",
          "throwIfNamespace": true,
          "development": false,
          "useBuiltins": false
        },
        "optimizer": {
          "globals": {
            "vars": {
              "__DEBUG__": "true"
            }
          }
        }
      },
      "target": "es5",
      "loose": false,
      "externalHelpers": false,
      // Requires v1.2.50 or upper and requires target to be es2016 or upper.
      "keepClassNames": false
    },
    "minify": false
}

Expected behavior

Should transpile JSX for .js files automatically

Actual behavior

No response

Version

1.5.5

Additional context

Am using these packages:

"@swc-node/register": "1.5.5",
"swc": "1.0.11",
"mocha": "9.2.2",

Running the tests with this .mocharc:

{
  "exit": true,
  "color": true,
  "require": ["@swc-node/register", "test/register.js", "test/setup.js"],
  "ignore": "node_modules"
}
yairEO commented 1 year ago

Any news please? I really really want this to be solved :)

kryops commented 1 year ago

We have a related issue after an upgrade that @swc-node/register does not parse .js files as JSX, even through we declare jsx: 'react' in our register() call. The workaround for us however is to downgrade to 1.5.5 😅

Could this be caused by https://github.com/swc-project/swc-node/commit/af643b849c32abb58bd1c0fdf98eeeac08548e25 ?