2016-04-08 148 views
3

我正在使用webpack管理我的反應應用程序。現在,我想從這個網址導入依賴性:webpack如何從外部URL導入

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=gNO2wKVBNupZfafi0bl0sW3dIKqAHn4l"> 

傳統我只是把上面的代碼在我的index.html文件。但是現在我怎麼讓webpack加載這個url呢?我的反應如何使用這種依賴性?

當我啓動的WebPack-dev的服務器,我會得到以下錯誤:

ERROR in Entry module not found: Error: Cannot resolve module 'http://api.map.baidu.com/api' 

然後我用小加載器加載的URL。下面是JavaScript代碼使用裝載機:

import $ from 'jquery' 
import React from 'react'; 
import ReactDOM from 'react-dom'; 
import load from 'little-loader'; 

import './main.css'; 
import './component'; 
import Search from './search/search' 

load('http://api.map.baidu.com/api?v=2.0&ak=gNO2wKVBNupZfafi0bl0sW3dIKqAHn4l', function(err){ 
    console.log('err:', err); 
}); 

// document.body.appendChild(component()); 


ReactDOM.render(<Search />, document.getElementById('search')); 

,但我仍然有以下錯誤時推出的WebPack:

ERROR in Entry module not found: Error: Cannot resolve module 'http://api.map.baidu.com/api' in /Users/yzzhao/dev/react-demo/webpack_demo 

回答

6

在未來,你應該能夠使用動態需要通過System.importWebpack 2將原生支持它們。

System.import('<url>') 
    .then(function() { 
    console.log('Loaded!'); 
    }); 

如果您不想等待它,可以使用腳本加載庫。

例子:

安裝:

npm install little-loader --save 

用途:

import load from 'little-loader'; 

load('<url>', function(err){ 

}) 

或者做手工

function load(url) { 
    return new Promise(function(resolve, reject) { 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.async = true; 
    script.src = url; 
    script.onload = resolve; 
    script.onerror = reject; 
    document.head.appendChild(script); 
    }) 
} 

load('<url>') 
    .then(function() { 
    console.log('Loaded!'); 
    }) 
    .catch(function(err) { 
    console.error('Something went wrong!', err); 
    }) 
+0

感謝您的回覆。我遵循小裝載解決方案,但仍然無法正常工作。我已更新我的帖子,以提供我使用的代碼。你能不能看一下,讓我知道我是否正在使用正確的方式? –

+0

你嘗試將'load'重命名爲'_load'嗎?也許關鍵字'load'在你的代碼中以某種方式保留。 – HaNdTriX

+0

我檢查了當我導入這個依賴項時,我從瀏覽器中得到了以下錯誤:除非明確打開,否則無法從異步加載的外部腳本寫入文檔。我如何允許瀏覽器從異步加載它? –