Javascript, накопительный пакет: синтаксис «import» во внутреннем файле объединения вызывает синтаксическую ошибку при выполнении накопительного пакета - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть приложение nodeJS / express с накопительным пакетом. Я использую файл конфигурации накопительного пакета с командой, определенной в пакете. 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. js в строке 481. Процесс принимает динамический c синтаксис импорта в этой функции как синтаксическую ошибку (неожиданный токен "import"). Кажется, что свертка выдает эту ошибку, прежде чем процесс выполнит мой собственный файл конфигурации. В соответствии с этим, я предполагаю, что исходный код свертывания вызывает эту ошибку, а не исходный код MINE, поскольку у моего кода нет шансов быть загруженным и выполненным. Если я прав, играю с плагинами и т. Д. c. бессмысленно, так как накопительный пакет даже не достигает этой точки, где он загружает мои плагины (например, babel), мои конфиги или анализирует мой код. Согласно документации, накопительный пакет должен поддерживать синтаксис «импорт / экспорт» в своих собственных файлах, а также в моих файлах конфигурации, без какой-либо дополнительной настройки.

Вот мой список dev-зависимостей с версией накопительного пакета, которую я использую:

"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.config. js, где конфигурация Babel загружен. Что важно, проект выполняется без ошибок на компьютере, на котором я создал репо (windows 10), и не работает на компьютере, на котором я клонировал репо (windows 7) - поэтому узел, версии git и npm отличаются здесь и там. Но в зависимости от пакета. json файл, версия накопительного пакета одинакова на обеих машинах.

Версия моего узла (win 7): 8.11.3

Моя npm версия (win 7 ): 6.4.14

Я пытался (win7) "npm uninstall rollup -g" (просто наверняка, если он установлен глобально и конфликтует с версией в проекте), но он не работает. Прямо сейчас я понятия не имею, что делать, и я не нашел ресурсов о проблеме, подобной моей. Буду признателен за любой совет.

1 Ответ

0 голосов
/ 30 апреля 2020

Версия NodeJS, которую вы используете на своем компьютере с Win7, не совместима с версией Rollup, которую вы используете, это можно узнать, проверив https://github.com/rollup/rollup/blob/master/package.json#L141.

Используя свойство engine, пакет NPM может указывать, с какими версиями NodeJS они совместимы, в этом случае требуется версия 10 или выше.

...