【问题标题】:How to configure babel7 to support `import {}` from `export default` in javascript如何在 javascript 中配置 babel7 以支持从 `export default` 中的 `import {}`
【发布时间】:2019-05-27 20:45:22
【问题描述】:

我正在将webpack 4 和babel 7 用于javascript 项目。当我使用import { ... } 语法时,我不起作用。以下是源代码:

./test.js

const a = 1;

export default { a };

./index.js

import { a } from './test';

console.log(a);

输出为undefined。如果我将index.js 更改如下:

import a from './test';

console.log(a.a);

我想知道如何配置babel7 以支持import {}。下面是我的 .babelrc:

{
  "presets": [
    "@babel/preset-env"
  ]
}

我也尝试了一些插件,但它们都不起作用:

{
  "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"
  ]
}

以下是依赖项:

devDependencies": {
    "@babel/cli": "^7.2.3",
    "@babel/core": "^7.2.2",
    "@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-object-rest-spread": "^7.2.0",
    "@babel/plugin-syntax-export-default-from": "^7.2.0",
    "@babel/plugin-transform-arrow-functions": "^7.2.0",
    "@babel/plugin-transform-async-to-generator": "^7.2.0",
    "@babel/preset-env": "^7.2.3",
    "@babel/preset-es2015": "^7.0.0-beta.53",
    "babel-loader": "^8.0.4",
    "jest": "^23.6.0",
    "webpack": "^4.28.2",
    "webpack-cli": "^3.1.2",
    "webpack-dev-server": "^3.1.14"
  },

下面是我对babel-loader 的 webpack 配置:

module: {
      rules: [
        {
          test: /\.js?$/,
          exclude: /(node_modules)/,
          loader: 'babel-loader'
        }
      ]
    },

【问题讨论】:

    标签: javascript webpack babeljs webpack-4 babel-loader


    【解决方案1】:

    这与 Babel 无关。问题是您需要了解命名导出的工作原理。

    import { a } from './test';
    

    正在尝试从test.js 导入命名 导出a。方括号 {} 语法用于导入 named 导出。

    相反,继续

    import a from './test';
    

    这是导入default导出的语法,

    或更改 test.js 以执行名为 a 的导出:

    const a = 1;
    
    export { a };
    

    你的test.js只有一个default导出,没有一个名为a的导出。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2016-02-10
    • 2014-06-07
    • 2021-03-19
    相关资源
    最近更新 更多