【问题标题】:import statement doesn't throw any error when a exported property is not defined in the export file当导出文件中未定义导出属性时,import 语句不会引发任何错误
【发布时间】:2018-04-30 20:52:47
【问题描述】:

在检查导入/导出功能时,令人惊讶的是,如果在导入中使用了命名属性并且未在导出文件中定义它,那么它不会引发任何错误?

下面是例子

_export.js

export const ALPHA = 'alpha';
export const BETA = 'beta';

_import.js

import {ALPHA, BETA, GAMMA} from './export_'

console.log("alpha is ", ALPHA);
console.log("beta is", BETA);
console.log("gamma is", GAMMA);

这里GAMMA 没有在_export.js 中定义,但不要在_import.js 中抛出任何错误?

我遇到了这个问题,因为我在import 语句中不小心导入了错误的文件(2 个目录中的文件名相同),但它不会抛出任何错误,即在文件中找不到给定的导出命名属性。

这种行为是否正确?

linter 中是否有任何 linting 规则(例如 eslint)可以识别此类错误并向开发人员抛出错误或警告?

【问题讨论】:

  • 你的 ES6 运行时应该抛出这个。
  • 不,它没有抛出任何错误。
  • 你使用的是哪个运行时,原生模块支持?转译后的 commonjs 模块可能不会抛出。
  • 我在 macOS 中使用babel-node 并使用构建系统在 sublime text 3 中测试此功能。这有关系吗?

标签: javascript ecmascript-6 eslint


【解决方案1】:

据我所知,esLint 不提供开箱即用的检查。
您可能想使用eslint-plugin-import
我使用它,当找不到模块时,它会抛出 import/named 错误。
例如:

在“../../modules”中找不到 MyModule

examples

【讨论】:

  • eslint 在找不到模块时已经给出错误,但问题是当我在不同目录中具有相同的模块名称(文件名)但内容不同时。
猜你喜欢
  • 2019-05-01
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 2022-07-02
  • 1970-01-01
  • 2017-11-01
相关资源
最近更新 更多