2017-02-22 45 views
1

没有定义Eslint问题,我有一个App.js文件是这样的:与进口

import './bootstrap'; 

if (document.getElementById('vue')) { 
    new Vue({ 
    }); 
} 

它导入javascript文件,其持有的Vue NPM包(节点模块)的引导。

在我的引导文件,我将其导入像这样:

import Vue from 'vue'; 

当我运行与此设置eslint虽然我得到告诉:没有定义

“Vue公司”。

如果eslinter只检查每个文件,这看起来很明显,因为实际上Vue变量是在导入的文件中定义的。这可以修复干净,或者我必须编辑我的.eslintrc.js像这样的情况?

回答

2

我相信ES6进口只适用于当前的文件(这是一个模块系统的主要好处 - 避免全球污染)。不带绑定导入模块不会使该模块的导入可用;它们仅限于该模块的范围。

您有几种选择:

  1. 你可以明确地导入它无处不在,你需要它(与模块预期的方式)。

    import Vue from 'vue'; 
    
  2. 您可以从您的引导文件导出Vue公司(和其他东西),并导入了一切:

    在bootstrap.js:

    import Vue from 'vue'; 
    export { Vue }; 
    

    在App.js:

    import * as bootstrap from './bootstrap'; 
    const Vue = bootstrap.Vue; 
    
  3. 您可以在您的引导文件中使Vue成为全局文件,但它损害了模块的优点: window.Vue = Vue;

在MDN的importexport文章提供的进口和出口的不同可能的方式很好的概述。

+0

我知道在这例如#2是非常没有意义的,因为你不保存自己的任何代码,因为你可以用_import Vue替换_ue vue = bootstrap.Vue; _首先,_ _,但我希望它演示能够从你的引导目标出口。 – Dominic

0

你可以尝试几个configuration eslint在.eslintrc得到这个工作。该误差与es6-modules来了,你可以尝试用以下的配置玩:

{ 
    "parserOptions": { 
     "ecmaVersion": 6, 
     "sourceType": "module", 
     "ecmaFeatures": { 
      "jsx": true 
     } 
    }, 
    "rules": { 
     "semi": 2 
    } 
} 
+0

试了一大堆。我害怕似乎没有工作。尽管感谢您的评论。如果任何其他人可能有一些想法,他们会更受欢迎。 –

+0

@ Stephan-v我希望你已经以正确的方式给它,检查这个[链接](http://eslint.org/docs/user-guide/configuring#specifying-parser-选项) – Saurabh