2016-07-24 50 views
0

我正在研究一個electron應用程序,該應用程序使用動態要求在運行時加載擴展(節點模塊)。該應用程序目前被安裝擴展的陣列遍歷它們,需要是他們和保存的對它們的引用:有沒有辦法在webpack中完全忽略動態需求?

getInstalledExtensions() 
    .then(extensions => { 
    extensions.map(extension => require(extension.path)) 
    }) 
    .then(saveExtensions) 

我遇到了麻煩的WebPack到完全忽略的第三行需要聲明:require(extension.path)

構建時未知安裝的擴展列表。當用戶首次安裝應用程序時,該數組爲空,隨着用戶安裝/卸載擴展程序,它會增大/縮小。

我已經試過:

module: { 
    exprContextRegExp: /$^/, 
    exprContextCritical: false, 
} 

,但它只是替換require(extension.path)

!(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()) 

我爲什麼要在電子應用使用的WebPack?

require很貴,它會大大影響我的應用程序的啓動時間。作爲一個例子,require('request')需要大約800ms這是荒謬的。我想盡可能地捆綁儘可能多的模塊,以減少我的應用程序的啓動時間。

我也想有可能使用CSS加載器。我目前正在使用全局類和內聯樣式的組合,這並不理想。

回答

1

我對製作原子的yeoman包有同樣的問題。我的解決方案如下:

  1. 在輸出文件夾「originalRequire.js」文件中創建只有一行:module.exports = require。
  2. 在webpack config中,在外部部分提及「./originalRequire」(所以它不會處理並將originalRequire包含到build中)。
  3. 使用string-replace-loader替換require和require(「./ originalRequire」)。在你的例子中,它將是require(「./ originalRequire」)(extension.path)。
+0

這個解決方案對我來說效果很好。謝謝! 編輯:我沒有使用字符串 - 替換 - 加載器 - 只是堅持originalrequire.js在外部是我所需要的。 –

1

您可以使用window.require()而不是require()電子。

相關問題