Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Does not work with babel-plugin-import #161

Open
philippotto opened this issue Jul 4, 2018 · 16 comments
Open

Does not work with babel-plugin-import #161

philippotto opened this issue Jul 4, 2018 · 16 comments

Comments

@philippotto
Copy link

Hi,

when combining this plugin with babel-plugin-import, the compilation drops import/require statements. For example,

import { Table, Input } from "antd";

const { Column } = Table;
const { Search } = Input;

with this .babelrc:

{
    ...
    plugins: [
        ["import", { libraryName: "antd" }],
        "istanbul"
      ],
}

results in this output:

"use strict";

var cov_hq3awr3ym = function () {
  var path = "...",
      hash = "a233b011d34ec8bb2cd83adfac23c4ca7cdfbed9",
      Function = function () {}.constructor,
      global = new Function('return this')(),
      gcv = "__coverage__",
      coverageData = {
    path: "...",
    statementMap: {
      "0": {
        start: {
          line: 3,
          column: 19
        },
        end: {
          line: 3,
          column: 24
        }
      },
      "1": {
        start: {
          line: 4,
          column: 19
        },
        end: {
          line: 4,
          column: 24
        }
      }
    },
    fnMap: {},
    branchMap: {},
    s: {
      "0": 0,
      "1": 0
    },
    f: {},
    b: {},
    _coverageSchema: "332fd63041d2c1bcb487cc26dd0d5f7d97098a6c"
  },
      coverage = global[gcv] || (global[gcv] = {});

  if (coverage[path] && coverage[path].hash === hash) {
    return coverage[path];
  }

  coverageData.hash = hash;
  return coverage[path] = coverageData;
}();

var _ref = (cov_hq3awr3ym.s[0]++, Table);

const Column = _ref.Column;

var _ref2 = (cov_hq3awr3ym.s[1]++, Input);

const Search = _ref2.Search;

where Table and Input are never defined.

@coreyfarrell
Copy link
Member

It looks like babel-plugin-import is a Babel 7 plugin. If you haven't already please try this with babel-plugin-istanbul@next (version 5.x). The current latest release of babel-plugin-istanbul still uses babel 6.

This would be easier to investigate if you could provide a small repo demonstrating the issue.

@philippotto
Copy link
Author

It looks like babel-plugin-import is a Babel 7 plugin.

What makes you think so? Since v1.6.0, the plugin is compatible with Babel 7, but support wasn't dropped as far as I know.

If you haven't already please try this with babel-plugin-istanbul@next (version 5.x). The current latest release of babel-plugin-istanbul still uses babel 6.

My project uses babel 6, which is why I assume this won't fix the bug?

This would be easier to investigate if you could provide a small repo demonstrating the issue.

Ok, I'll try to get some time for that.

@coreyfarrell
Copy link
Member

https://github.com/ant-design/babel-plugin-import/blob/master/src/Plugin.js#L2 shows that it uses babel 7 modules. I do not recommend mixing babel 6 and babel 7, so if your project uses babel 6 I recommend trying again with "babel-plugin-import": "=1.5.0" for your dependency in package.json (pin to the last release before they started work on babel 7).

@yutingzhao1991
Copy link

yutingzhao1991 commented Oct 24, 2018

Still has this problem when I use babel 7 and istanbul@5.x

a small repo demonstrating the issue: https://github.com/yutingzhao1991/istanbul-import-bugreport

see https://github.com/yutingzhao1991/istanbul-import-bugreport/blob/master/lib/index.js#L53 , uniq is undefined

@afc163
Copy link

afc163 commented Oct 24, 2018

@yutingzhao1991 same bug

@coreyfarrell
Copy link
Member

I can confirm this, thank you for the demo repository. Interesting note this works when I do a two-stage tranformation. I created the following babel.config.js:

module.exports = {
  env: {
    step1: {
      presets: ['@babel/preset-env'],
      plugins: [
        ['import', {
          libraryName: 'lodash',
          libraryDirectory: '',
          camel2DashComponentName: false,
        }, 'lodash']
      ]
    },
    step2: {
      plugins: [['istanbul', {useInlineSourceMaps: false}]]
    }
  }
};

Then ran:

NODE_ENV=step1 npx babel src --out-dir tmp
NODE_ENV=step2 npx babel tmp --out-dir lib

This produced what I expected to see in lib/index.js. I'm not sure what the cause/solution is. Obviously I'm not suggesting that step1 / step2 setup is a solution, just a possible clue.

@zenjava
Copy link

zenjava commented Dec 10, 2018

I also encountered the same problem. The same code, using Jest for testing。

@zenjava
Copy link

zenjava commented Dec 10, 2018

image

@Mrjeff578575
Copy link

The same bug. And can anyone provide a solution? thx.

@Mrjeff578575
Copy link

I find a way to solve this problem, maybe it's a not perfect way, but I hope it can bring some inspiration to you.
umijs/babel-plugin-import@07cf344

@yutingzhao1991
Copy link

A temporary way: const { Option } = Select; -> const Option = Select.Option;

@coreyfarrell
Copy link
Member

@Mrjeff578575 have you considered submitting that patch to babel-plugin-import?

@likezero
Copy link

likezero commented Aug 8, 2019

the same bug.

@zeel-swiggy
Copy link

the same bug

1 similar comment
@zzfzfz
Copy link

zzfzfz commented Aug 10, 2020

the same bug

@likezero
Copy link

how about this bug?
as @zenjava shows, maybe it's not a bug for babel-plugin-import.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants