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

Syntax 为什么我的import语句在Deno中有语法错误,但在Nodejs中工作正常?,syntax,deno,Syntax,Deno,我正在使用两个VSCode设置进行测试;一个运行Deno,另一个运行Nodejs,使用Sucrase编译器转换代码,以便我可以编写本机ES6模块。我有一个非常简单的测试:一个小类和一个导入它的模块。这是Deno VSCode设置 我的VSCode资源管理器面板如下所示 PLANNER-CODEBASE .vscode launch.json setting.txt src planne

我正在使用两个VSCode设置进行测试;一个运行Deno,另一个运行Nodejs,使用Sucrase编译器转换代码,以便我可以编写本机ES6模块。我有一个非常简单的测试:一个小类和一个导入它的模块。这是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


我不知道出了什么问题,也不知道如何解决。如果有任何帮助,我们将不胜感激。

不要像这样在函数内部导入模块,而是向外移动。如果您想随意加载模块,请使用导入

试试这个:

     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

提供的代码可以工作,除了导入之外,您需要向我们展示代码,我们可以在哪里重现错误。环境是从此repo创建的VSCode项目:。其中唯一的代码是这个问题中显示的两个文件,因为创建它是为了开始测试大量代码,而这个类是第一个要测试的。Index.js调用main.js,main.js调用ArrayList。就这些了。这是deno 1.1.2对我来说很好。作为一种健全性测试,将文章中文件的内容复制并粘贴到文件系统中具有完全相同名称的文件中。再说一遍。代码运行良好@MartinDuo发布完整的代码,以及您使用什么命令来运行它。错误显示为第697行,而此处发布的代码有~28行。发布完整的代码,这样我们就可以重现错误。是的,我试过了,它很有效。但是作为在React之外编写JS的新手,出于某种原因,我假设导入被放置在需要它们的函数中。可惜错误并没有说“SyntaxError:导入声明可能只出现在模块的顶层”。将它放在全局范围外是定义ArrayList,还是仅在文件的范围内?谢谢您的回答。如果您想使用内部函数,您必须使用lazyLoading syntex。我不确定,但使用外部是文件范围。