Как опубликовать модуль npm без зависимости от babel? - PullRequest
0 голосов
/ 12 января 2019

Я создаю проект npm (moduleA) и опубликую его в реестре npm. Он использует JavaScript с webpack4 и babel7. Он работает нормально сам по себе, но есть некоторые проблемы, когда я пытаюсь протестировать проект из другого модуля. Тестовый проект использует babel 6.26.3 с webpack2. Когда я строю тестовый проект, я получаю ошибку ниже:

ERROR in /Users/dev/moduleA/build/index.js
Module build failed: Error: Requires Babel "^7.0.0-0", but was loaded
 with "6.26.3". If you are sure you have a compatible version of 
@babel/core, it is likely that something in your build process is loading 
the wrong version. Inspect the stack trace of this error to look for the 
first entry that doesn't mention "@babel/core" or "babel-core" to see what 
is calling Babel.

Первая строка в выводе ошибки выше о пакете moduleA, который имеет зависимость babel7. Я ожидаю, что артефакт сборки из moduleA не должен содержать никакой информации о babel. Но похоже, что moduleA приводит babel7 в тестовый проект, что противоречит тестовому проекту babel6. Как я могу решить эту проблему в модуле A?

Ниже приведено moduleA Конфигурация babelrc:

{
  "presets": [
    "@babel/preset-env"
  ],
  "plugins": [
    ["@babel/plugin-proposal-decorators", { "legacy": true }],
    "@babel/plugin-proposal-class-properties",
    "@babel/plugin-transform-async-to-generator",
    "@babel/plugin-proposal-object-rest-spread",
    "@babel/plugin-proposal-export-default-from",
    "@babel/plugin-syntax-export-default-from",
    "@babel/plugin-proposal-export-namespace-from"
  ]
}

Зависимости babel в moduleA:

"devDependencies": {
    "@babel/cli": "^7.2.3",
    "@babel/core": "^7.2.0",
    "@babel/plugin-proposal-class-properties": "^7.2.3",
    "@babel/plugin-proposal-decorators": "^7.2.3",
    "@babel/plugin-proposal-export-default-from": "^7.2.0",
    "@babel/plugin-proposal-export-namespace-from": "^7.2.0",
    "@babel/plugin-proposal-function-sent": "^7.2.0",
    "@babel/plugin-proposal-json-strings": "^7.2.0",
    "@babel/plugin-proposal-numeric-separator": "^7.2.0",
    "@babel/plugin-proposal-object-rest-spread": "^7.2.0",
    "@babel/plugin-proposal-throw-expressions": "^7.2.0",
    "@babel/plugin-syntax-dynamic-import": "^7.2.0",
    "@babel/plugin-syntax-export-default-from": "^7.2.0",
    "@babel/plugin-syntax-import-meta": "^7.2.0",
    "@babel/plugin-transform-arrow-functions": "^7.2.0",
    "@babel/plugin-transform-async-to-generator": "^7.2.0",
    "@babel/plugin-transform-runtime": "^7.2.0",
    "@babel/preset-env": "^7.2.3",
    "@babel/preset-es2015": "^7.0.0-beta.53",
    ...

1 Ответ

0 голосов
/ 13 января 2019

Возможно, вы захотите разделить отправляемые файлы на два: src и dist.

src будет содержать оригинальный код, который требует Babel и Webpack для запуска.

dist - это скомпилированная версия, скорее всего, код ES5, который может работать без использования Babel или Webpack.

Обратитесь к документации Webpack, чтобы создать скомпилированную версию, оптимизированную для производства: https://webpack.js.org/guides/production

После того, как вам удалось скомпилировать код, используйте атрибут main в файле package.json, чтобы указать на скомпилированную версию, а не на исходную (оригинальную) версию.

...