为什么我的 import 语句在 Deno 中有语法错误但在 Nodejs 中工作正常?

Why does my import statement have a syntax error in Deno but works ok in Nodejs?

我正在测试两个 VSCode 设置;一个 运行ning Deno,另一个 运行ning Nodejs 使用 Sucrase 编译器转换代码,以便我可以编写原生 ES6 模块。我有一个非常简单的测试:一个小 Class 和一个导入它的模块。这是 Deno VSCode 设置。

我的 VSCode 资源管理器面板如下所示。

    PLANNER-CODEBASE
        .vscode
            launch.json
            setting.txt
        src
            plannerFiles 
                ClassArrayList.js 
                main.js 
            log.ts 
            .gitignore
            .prettierrc 
            config.ts
            deps.ts
            index.ts
            makefile
            readMe.txt
            tsconfig.json

我 运行 使用此 launch.json 条目的代码。

    {
      "name": "Debug Program",
      "type": "node",
      "request": "launch",
      "cwd": "${workspaceFolder}",
      "runtimeExecutable": "deno",
      "runtimeArgs": ["run", "-A", "--unstable", "--inspect-brk", "./index.ts"],
      "port": 9229,
      "console": "integratedTerminal"
    },

这是index.ts

    import main from './src/plannerFiles/main.js'
    main()

这是main.js

    const main = () => {
      console.log('Starting your Planner App')
      
      import { ArrayList } from './ClassArrayList.js'
      let myArrayList = new ArrayList()
      
      let row0 = ['11/22/1968', '29', 'Revolution 9', 'Beatles', 'The Beatles [White Album]']
      let row1 = ['1960', '6', 'Fools Rush In', 'Frank Sinatra', "Nice 'N' Easy"]
      let row2 = ['11/11/1971', '1', 'One of These Days', 'Pink Floyd', 'Meddle']
      myArrayList.add(row0)
      myArrayList.add(row1)
      myArrayList.add(row2)
      myArrayList[5] = 'five'
      let xx = myArrayList.length
      let xxx = myArrayList.getUpperBound()
      let x = myArrayList.item(0)
      let y = myArrayList[1]
      let zzz = myArrayList[5]
      myArrayList.clear()
      myArrayList = ['LEVEL0INDENT', 50, 100, 75, 75, 100, 100, 100, 100] //first value is for initial space
      let z = myArrayList[1]
      
      debugger
      // static clear = (obj) => (obj.length = 0)
      // ArrayList.clear(myArrayList)
    }
    export default main

这是ClassArrayList.js

    class ArrayList extends Array {
      constructor() {
        super()
      }
      add = (obj) => {
        this.push(obj)
      }
      item = (key) => {
        let obj = this.valueOf()[key]
        return obj
      }
      getUpperBound = () => {
        return this.valueOf().length - 1
      }
      clear = () => {
        this.valueOf().length = 0
      }
    }
    export { ArrayList }

这是我的终端输出。

    ramData\chocolatey\bin\deno.exe run -A --unstable --inspect-brk ./index.ts
    Debugger listening on ws://127.0.0.1:9229/ws/fd15dc8c-111d-45e4-b09e-651aae5b01c7
    error: Expected LParen, got Some(LBrace) at file:///C:/Users/Bruce/Dropbox/Code/DENO%20BACKEND/Planner-Codebase/src/plannerFiles/main.js:4:9

我不知道出了什么问题或如何解决。任何帮助将不胜感激。

不是在函数内部导入模块,而是像这样移到外部。如果你想延迟加载模块使用 dynamic import

试试这个:

     import { ArrayList } from './ClassArrayList.js'
     const main = () => {
      console.log('Starting your Planner App');
      let myArrayList = new ArrayList();    
      let row0 = ['11/22/1968', '29', 'Revolution 9', 'Beatles', 'The Beatles [White Album]']
      let row1 = ['1960', '6', 'Fools Rush In', 'Frank Sinatra', "Nice 'N' Easy"]
      let row2 = ['11/11/1971', '1', 'One of These Days', 'Pink Floyd', 'Meddle']
      myArrayList.add(row0)
      myArrayList.add(row1)
      myArrayList.add(row2)
      myArrayList[5] = 'five'
      let xx = myArrayList.length
      let xxx = myArrayList.getUpperBound()
      let x = myArrayList.item(0)
      let y = myArrayList[1]
      let zzz = myArrayList[5]
      myArrayList.clear()
      myArrayList = ['LEVEL0INDENT', 50, 100, 75, 75, 100, 100, 100, 100] //first value is for initial space
      let z = myArrayList[1]
      
      debugger
      // static clear = (obj) => (obj.length = 0)
      // ArrayList.clear(myArrayList)
    }
    export default main