当前位置: 首页 > 知识库问答 >
问题:

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

从劲
2023-03-14

我有一个带有rollup bundler的nodeJS/express应用程序。我使用rollup配置文件,命令在包中定义。json,比如:“build”:“env ROLLUP_OPTIONS='prod'ROLLUP--config configs/ROLLUP.config.js”。当我尝试“npm运行构建”时,我遇到了错误:

> 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)

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

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);
}

此函数(见上图)位于node_modules/rollup/dist/shared/loadConfigFile中。第481行。进程将此函数中的动态导入语法作为语法错误(意外标记“导入”)。似乎rollup在进程执行我自己的配置文件之前抛出了这个错误。根据这一点,我假设汇总源代码导致了这个错误,而不是我的源代码,因为我的代码没有机会被加载和执行。如果我是对的,玩插件等游戏是没有意义的,因为rollup甚至没有达到这一点,它加载我的插件(例如babel)、配置或解析我的代码。根据docs的说法,rollup应该在自己的文件和我的配置文件中支持“导入/导出”语法,而不需要任何额外的配置。

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

"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插件在这里无关紧要,因为错误是在加载babel配置的rollup.config.js之前抛出的。重要的是,项目在我创建repo的机器上运行没有错误(windows 10),在我克隆repo的机器上失败(windows 7)-所以node、git和npm版本在这里和那里是不同的。但是根据package.json文件,两台机器上的汇总版本是相同的。

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

我的npm版本(win 7):6.4.14

我尝试了(win7)“npm uninstall rollup-g”(只是为了确定,以防它是在全球安装的,并且与项目中的版本冲突),但它不起作用。现在我不知道该怎么办,我也没有找到关于类似问题的资源。如果您有任何建议,我将不胜感激。

共有1个答案

和选
2023-03-14

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

通过使用engine属性,NPM包可以指定它们与哪些版本的NodeJ兼容,在这种情况下,需要10或更高版本。

 类似资料:
  • 部署到netlify失败并出现错误:,但当我使用在本地构建时它可以工作(与netlify相同)。无法解析的包直接从github安装,而不是其他包。 package.json: netlify日志: KeyNavigation.ts: 为什么部署在netlify失败,而不是在本地?

  • Rollup 是 JavaScript 的模块 bundler,可将一小段代码编译为更大或更复杂的内容,例如库或应用程序。 它对 JavaScript 的 ES6 修订版中包含的代码模块使用了新的标准化格式,而不是先前的特殊解决方案(例如 CommonJS 和 AMD)。ES 模块使用户可以自由,无缝地结合自己喜欢的库中最有用的单个函数。

  • 似乎我们可以使用typescript来编写汇总配置文件。比如说,我可以创建一个名为,包含以下内容: 如果我以。 但如果我在其中使用一些打字: 它将报告以下错误: 有可能让它工作吗?我试着用ts节点

  • rollup-plugin-dev a development server for rollup why this plugin? compared to other plugins, this plugin: uses Fastify to provide the server and implement features while this means there are dependen

  • DEPRECATED We are deprecating this template in favor of the webpack one. Some things may have changed and I haven't tested this template in a while. Check the Groceries Vue app for an example of a wor