2016-01-13 72 views
19

我有一個.json文件,其中包含我希望使用典型的import/require語法從其他腳本文件中引用的配置內容。目前我正在使用webpack解決這些依賴關係,並將它們捆綁在一起。這個文件,但我想在運行時加載,並希望可能有一些類型的加載程序,可以解決和加載我在運行時的文件。到目前爲止,我還沒有找到任何符合我需求的東西。任何使用webpack在運行時加載資源的方式?

實施例:

var jQuery = require('jQuery'); 
var sol = require('some-other-lib'); 
var myConfig = require('/real/production/url/myconfig.json'); 

console.log(myConfig.myFavoriteSetting); 

在上面的例子我想有myconfig.json解決,在運行時加載。

可能相關的問題:

+1

我搜索過類似的東西,但沒有發現任何裝載機。最終我使用了jQuery getJSON函數。 – VyvIT

+0

我目前做出了相同的解決方法。從長遠來看,這也許更簡單一些。 – jpierson

+0

我很好奇你怎麼能夠得到這個工作,即使與jQuery getJSON?我似乎得到了一個404配置文件不存在,雖然它在dist文件夾中。 –

回答

5

我想你想要的是require.ensure,的WebPack代碼分裂。您'確保'的模塊被放入一個單獨的包中,並且當'確保'在運行時執行時,webpack運行時會自動通過ajax獲取包。請注意確保的回調語法 - 您的回調在包加載完成後運行。您仍然需要在該點需要所需的模塊; 。確保只是確保它們可用。

代碼拆分是webpack的主要功能之一,它可以讓你在任何時候只加載你需要的東西。有插件等,以優化多個捆綁。

+2

require.ensure的使用接近,但我認爲我所尋找的是更多的沿着如何*異步/等待*可以拆分一半的函數使得後半部分作爲延續運行,而不必改變代碼的同步風格。如果像這樣的功能還不存在,雖然我認爲你的答案可能是最好的。 – jpierson

5

使用Webpack 2,您可以使用System.import。它使用Promise API。 AFAIK,目前沒有辦法在瀏覽器中運行異步/等待代碼。我相信Babel只能將異步/等待下載到ES2015,因此只有最新版本的Node(v6.x)才能運行它。我不認爲瀏覽器能夠理解它,因爲傳輸的代碼使用了生成器。

對於System.import,請注意,一些較舊的瀏覽器(IE 11及以下我相信)會要求您填充Promise API。查看polyfill.io。

如果您真的想在瀏覽器中使用異步/等待,您可能可以爲ES2015做一個完整的polyfill。

+0

是的,我可能應該更清楚地表明我正在尋找一種使用回調,承諾,生成器或我可以包裝異步等待的異步方法。就我而言,我已經在使用Babel以及TypeScript來管理這些類型的異步處理功能。 – jpierson

1

我有一個文件(config.json)相同的情況。

我決定把它與Copy-Webpack-Plugin

new CopyWebpackPlugin([ 
    // Copy directory contents to {output}/ 
    { from: 'config.json' } 
    ]) 

之後複製,我的文件是在輸出build目錄。我用 '外部材料' 屬性引用我的檔案在我webpack.config文件:

externals: { 
    'config': "require('./config.json')" 
    } 

在我的js文件,該文件加載config.json:

import config from 'config' 

'配置' 負載要求(」。 /config.json),它是輸出生成目錄中的一個。

我知道這很棘手,但我沒有找到解決我的問題的另一種解決方案。也許它會幫助別人。

編輯

我不得不爲了打造,因爲import config from 'config'不是沒有它理解使用的WebPack。這就是爲什麼我更換:

externals: { 
    './config.json': "require('./config.json')" 
    } 

var config = require('./config.json') //replace import config from 'config' 

沒有的WebPack,使用Javascript瞭解var config = require('./config.json'),因爲這是正確的道路。

當我構建具有的WebPack,它通過require('./config.json')當它看到「./config.json」改變,所以它的工作原理

+0

我似乎無法得到這個工作。在開發中構建時,Webpack不會在webpack.config.js的同一文件夾中搜索config.json(因爲'./config.json'引用)嗎?我只是拋出一個找不到config.json的模塊,因爲它在dev設置中的JS文件的其他地方。 – Tru

+0

你說得對,如果我想運行我的服務器,我必須在生成文件夾中執行它。 Webpack在build/index.js中構建我的服務器文件夾。 我的文件夾是這樣的: 生成文件夾 - > config.json和index.js(在webpack之後,在index.js中有'require('./ config.json')'uglified)。 服務器文件夾 - > config.json和index.js(但在index.js中,我有'從'配置'導入配置和節點不明白..) –

相關問題