babel-plugin-root-import with babel 7 - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь настроить Babel 7. Никогда раньше не использовал Babel, поэтому я действительно начинаю с нуля. Мне удалось установить и использовать @babel/plugin-proposal-optional-chaining, но я борюсь с babel-plugin-root-import.

Вот мой пакет. Json

//package.json

"scripts": {
  "start": "nodemon src/index.js --exec babel-node"
},
"devDependencies": {
  "@babel/cli": "^7.0.0-beta.51",
  "@babel/core": "^7.0.0-beta.51",
  "@babel/node": "^7.0.0-beta.51",
  "@babel/preset-env": "^7.0.0-beta.51"
},
"dependencies": {
  "@babel/plugin-proposal-optional-chaining": "^7.0.0-beta.51",
  "@babel/polyfill": "^7.0.0-beta.51",
  "babel-plugin-root-import": "^6.1.0"
}


//babel.config.js

module.exports = {
  "presets": ["@babel/preset-env"],
  "plugins": [
    ["@babel/plugin-proposal-optional-chaining"],
    ["babel-plugin-root-import",{
      "rootPathPrefix": "@"
    }]
  ]
};

Ниже мой код:

//src/index.js

require("./foo/index.js")();

//src/foo/index.js

module.exports = function() {
  console.log("Foo loaded")
}

Когда я выполняю код выше, я получаю Foo loaded в своей консоли.

Когда я изменяю src / index.js следующим образом:

//src/index.js

require("@/foo/index.js")();

Я получаю следующую ошибку:

internal/modules/cjs/loader.js:596
    throw err;
    ^

Error: Cannot find module '../foo/index.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:594:15)
    at Function.Module._load (internal/modules/cjs/loader.js:520:25)
    at Module.require (internal/modules/cjs/loader.js:650:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.<anonymous> (C:\Node.js\dev\babel7\src/index.js:2:1)
    at Module._compile (internal/modules/cjs/loader.js:702:30)
    at Module._compile (C:\Node.js\dev\babel7\node_modules\pirates\lib\index.js:91:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:713:10)
    at Object.newLoader [as .js] (C:\Node.js\dev\babel7\node_modules\pirates\lib\index.js:96:7)
    at Module.load (internal/modules/cjs/loader.js:612:32)
[nodemon] app crashed - waiting for file changes before starting...

Если я не установил rootPathPrefix в babel.config.js, я также не смогу использовать плагин с путями, начинающимися с ~, который должен быть значением по умолчанию. Что не так?

Большое спасибо!

1 Ответ

0 голосов
/ 27 июня 2018

Если вы запустите babel-cli напрямую с npx babel src/index.js, просто чтобы проверить вывод, вы обнаружите, что плагин корневого импорта корректно меняется:

require("@/foo/index.js")();

в:

require("../foo/index.js")();

@ (корень проекта) правильно заменен в файле index.js внутри папки src на ..

Если вы хотите, чтобы @ ссылался на root/src, вы можете установить опцию "rootPathSuffix": "src". Без этой опции вам придется обойтись:

require("@/src/foo/index.js")();
...