2017-01-09 19 views
0

私は、次が含まれているJavaScriptファイルがあります。名前空間をインポートするにはどうすればよいですか?

const api = { 
    call(type, url, data) { 
    console.log(type + "bar"); 
    }, 

    get(url, query) { 
    this.call("foo"); 
    } 
} 

を私は、必要に応じて、複数の異なるファイル間api.get()を呼び出すことができるようにしたいんだけど、トラブルこれをインポートを抱えています。 (apiの)名前は、オブジェクトを返すインポートを与える

import "services/api.js"; 
console.log(api); 

Uncaught ReferenceError: api is not defined

  • 、:私はapi変数にアクセスしようとしたときにのみimportてファイルをロードする

    1. 私にReferenceErrorを与えます内部メソッドはありません。

      import api from "../../services/api.js"; 
      console.log(api); 
      console.log(api.get); 
      

      Object {}
      undefined

    私は間違っていますか?など、あなたがそれをエクスポートする必要が

    const api = ... 
    
    export default api; 
    
  • 答えて

    2

    api.jsは何もエクスポートしていません。

    (デフォルト輸出リテラルapiオブジェクトよりもはるかに優れている)

    export function call(type, url, data) { 
        console.log(type + "bar"); 
    } 
    export function get(url, query) { 
        call("foo"); 
    } 
    

    、その後、あなたは

    import * as api from "../../services/api.js"; 
    console.log(api); 
    console.log(api.get); 
    
    +0

    ありがとうございます。このようにする方がはるかに良いと言いますが、なぜそうですか? –

    +0

    より管理しやすい構文とインポートの柔軟性。 – Bergi

    +1

    これは理にかなっています。このように、私は必須ではない関数をインポートする必要はありません。完璧! –

    1

    あなたはあなたのAPIをエクスポートする必要が

    const api = { 
        call(type, url, data) { 
        console.log(type + "bar"); 
        }, 
    
        get(url, query) { 
        this.call("foo"); 
        } 
    } 
    
    export {api} 
    

    とし、その後、それをインポートします。

    import {api} from './path/to/api' // no .js 
    

    このアプローチ1つのファイルから複数の項目(関数、クラス、変数)をエクスポートするときに使用されます。あなたのケースでapiは、エクスポートしている唯一の項目である場合は、defaultキーワードを使用することはできません、あなたは、もはやインポート中に称賛を使用する必要があります:

    const api = { 
        call(type, url, data) { 
        console.log(type + "bar"); 
        }, 
    
        get(url, query) { 
        this.call("foo"); 
        } 
    } 
    
    export default api 
    

    import api from './path/to/api' 
    

    グッド運!

    2

    まず:

    +0

    Aha!どうもありがとうございました。私はそれが私が行方不明だったとても単純なものだったと確信していた。 –

    +0

    あなたは大歓迎です! – motanelu

    +0

    [デフォルトのオブジェクトリテラルをエクスポートしないでください](http://stackoverflow.com/q/29893591/1048572)! – Bergi

    0

    のようにそれを使用することができます:あなたは、これらの機能のすべてのをエクスポートするために、それを書き換える必要がありますこのような副作用として、エクスポート/インポートはES6モジュール仕様ですので、ご注意ください。トランスペアラなしのノード/ CommonJSモジュール環境では、

    // export 
    module.exports.api = api 
    
    // or 
    module.exports = { api: api } ... 
    
    
    // import 
    var module = require(....) 
    
    関連する問題