繁体   English   中英

Javascript,汇总:汇总内部文件中的“导入”语法在执行汇总时导致语法错误

[英]Javascript, rollup: “import” syntax in rollup internal file causes syntax error, when rollup is executed

我有带有汇总捆绑器的 nodeJS/express 应用程序。 我使用汇总配置文件,命令在 package.json 中定义,如下所示:“build”:“env ROLLUP_OPTIONS='prod' rollup --config configs/rollup.config.js”。 当我尝试“npm run build”时,出现错误:

> deep@1.0.0 watch C:\Users\1\Desktop\sprout-test\sprout-backend
> env ROLLUP_OPTIONS='dev' rollup --config configs/rollup.config.js --watch



C:\Users\1\Desktop\sprout-test\sprout-backend\node_modules\rollup\dist\shared\loadConfigFile.js:484
        ? (await import(url.pathToFileURL(fileName).href)).default
                 ^^^^^^

SyntaxError: Unexpected token import
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:616:28)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (C:\Users\1\Desktop\sprout-test\sprout-backend\node_modules\rollup\dist\bin\rollup:23:25)

这是导致错误的 function,在汇总源代码中:

async function loadConfigFile(fileName, commandOptions) {
    const extension = path.extname(fileName);
    const configFileExport = extension === '.mjs' && supportsNativeESM()
        ? (await import(url.pathToFileURL(fileName).href)).default
        : extension === '.cjs'
            ? getDefaultFromCjs(require(fileName))
            : await getDefaultFromTranspiledConfigFile(fileName, commandOptions.silent);
    return getConfigList(configFileExport, commandOptions);
}

此 function(上图)位于第 481 行的 node_modules/rollup/dist/shared/loadConfigFile.js 中。进程在此 function 中采用动态导入语法作为语法错误(意外标记“导入”)。 在进程执行我自己的配置文件之前,汇总似乎会引发此错误。 据此,我假设汇总源代码导致此错误,而不是 MINE 源代码,因为我的代码没有机会被加载和执行。 如果我是对的,那么玩插件等是没有意义的,因为汇总甚至没有达到这一点,它会加载我的插件(例如 babel)、我的配置或解析我的代码。 根据文档,汇总应在其自己的文件和我的配置文件中支持“导入/导出”语法,而无需任何额外配置。

这是我的开发依赖项列表,以及我使用的汇总版本:

"devDependencies": {
    "@babel/core": "^7.9.0",
    "@babel/plugin-transform-runtime": "^7.9.0",
    "@babel/preset-env": "^7.9.5",
    "@rollup/plugin-commonjs": "^11.1.0",
    "@rollup/plugin-json": "^4.0.2",
    "@rollup/plugin-node-resolve": "^7.1.3",
    "@rollup/plugin-run": "^2.0.2",
    "eslint": "^6.8.0",
    "lint-staged": "^10.1.6",
    "prettier": "^2.0.4",
    "rollup": "^2.6.1",
    "rollup-plugin-babel": "^4.4.0",
    "rollup-plugin-includepaths": "^0.2.3",
    "rollup-plugin-uglify": "^6.0.4"
  }

我放置了整个列表以防万一,但正如我所说,我认为我的 babel 插件在这里无关紧要,因为在 rollup 加载 rollup.config.js 之前抛出错误,其中加载了 babel 配置。 重要的是,项目在我创建 repo(windows 10)的机器上运行没有错误,并且在我克隆 repo(windows 7)的机器上失败 - 所以节点,git 和 npm 版本在这里和那里是不同的。 但是根据 package.json 文件,两台机器上的汇总版本相同。

我的节点版本(win 7):8.11.3

我的 npm 版本(win 7):6.4.14

我试过(win7)“npm uninstall rollup -g”(只是肯定的,以防它全局安装并与项目内版本冲突)但它不起作用。 现在我不知道该怎么做,也没有找到与我类似的问题的资源。 我会很感激任何建议。

您在 Win7 机器上使用的 NodeJS 版本与您使用的 Rollup 版本不兼容,您可以通过检查https://github.com/rollup/rollup/blob/master/package.json#L141找到这一点.

通过使用引擎属性 NPM package 可以指定它们兼容的 NodeJS 版本,在这种情况下需要版本 10 或更高版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM