Javascript 如何从终端运行esnext文件

Javascript 如何从终端运行esnext文件,javascript,node.js,typescript,Javascript,Node.js,Typescript,我是一个新的typescript,我写了一个SDK,我的.tsconfig看起来有点像这样 { "compilerOptions": { "moduleResolution": "node", "experimentalDecorators": true, "module": "esnext", "noImplicitReturns": true, "noUnusedLocals": true, "sourceMap": true, "

我是一个新的typescript,我写了一个SDK,我的.tsconfig看起来有点像这样

{
  "compilerOptions": {
    "moduleResolution": "node",
    "experimentalDecorators": true,
    "module": "esnext",
    "noImplicitReturns": true,
    "noUnusedLocals": true,
    "sourceMap": true,
    "strict": true,
    "target": "es2015",
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "noImplicitAny": false,
    "outDir": "./lib",
  },
  "compileOnSave": true,
  "include": [
    "src"
  ],
  "exclude": ["node_modules"]
}
我使用
tsc
命令构建它。现在,我创建了localtest.js文件,并将其导入其中

import getWorkspace from './lib/index'

const randomFunc = async () => {
   // some code 
}
randomFunc()
然后在我的终端
节点localtest.js
中使用以下命令运行它,这会引发以下错误

function (exports, require, module, __filename, __dirname) { import getWorkspace from './lib/index'
                                                                     ^^^^^^^^^^^^

SyntaxError: Unexpected identifier
    at new Script (vm.js:80:7)
    at createScript (vm.js:274:10)
    at Object.runInThisContext (vm.js:326:10)
    at Module._compile (internal/modules/cjs/loader.js:664:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
    at startup (internal/bootstrap/node.js:283:19)

任何关于如何修复它以及为什么会出现上述错误的想法

节点默认不接受
.js
文件中的ES6导入

  • 在节点12上,添加
    --实验模块
    标志。如果更低,你必须升级
  • 将扩展名更改为
    .mjs
    ,或者
  • 要在
    .js
    文件(如TS发出的文件)中使用ESModules,请在最近的package.json中添加
    “type”:“module”
更多信息:



或者,您可以更改为“commonjs”以发出
require
s.

节点支持此功能,但它仍然是实验性的。你需要设置一些东西

  • 您需要Node.js版本12+
  • 您需要一个标志
    ——实验模块
    ,并设置为使用它
  • 包中的
    类型
    更改为
    模块
    。json

  • 您可以阅读相关文档。

    这甚至不是合法的ES 6:导入和导出必须是顶级语句。你不能在一个函数里面做。为什么它必须是ES6模块呢?
    node --experimental-modules localtest.js
    
    // package.json
    {
      "type": "module"
    }