2017-02-22 43 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