2016-02-21 24 views
2

不知道爲什麼,但是當通過WebPack導入Summernote到一個版本時,WebPack最終拉入整個dist文件夾並因此抱怨字體/圖像等內該文件夾是無效的JS。

從webpack輸出中,您可以看到它像預期的那樣在summernotes dist js文件中提取(在我的應用程序的源文件中找到var summernote = require('summernote');)。

[149] ./~/summernote/dist/summernote.js 200 kB {1} [built] 
    [150] ./~/summernote/dist ^\.\/.*$ 4.93 kB {1} [built] [5 warnings] 

我不明白的是,其中一塊150來源,這是一個正則表達式,將隨後在dist文件夾中的每個項目匹配。

WebPack具有非常基本的配置,並且所有其他正在導入的項目按預期運行。

許多警告之一的例子:

WARNING in ./~/summernote/dist/font/summernote.ttf 
Module parse failed: /<project>/node_modules/summernote/dist/font/summernote.ttf Line 1: Unexpected token ILLEGAL 
You may need an appropriate loader to handle this file type. 
(Source code omitted for this binary file) 
@ ./~/summernote/dist ^\.\/.*$ 

哪裏塊150從哪裏來,什麼是添加^\.\/.*$要求。

+0

你應該在這裏標記唯一的答案作爲正確的答案。這是完全正確的。 –

回答

1

當webpack解析模塊時,通過require('expression'),會有一個自動創建的上下文。有三種類型的自動創建上下文:

  • exprContext:作爲依賴的表達(即要求(表達式))
  • wrappedContext:表達式加前和/或後綴串(即要求(」。 /模板/」 +表達式))
  • unknownContext:都需要其他任何不可分析的使用(即要求)

而且unkownContext具有常規默認快遞將嘗試匹配文件:^\.\/.*$; 因此,出於某種原因,您的項目包含無法解析的需求。當webpack打包它時,它將解析文件夾下的所有文件並嘗試匹配require

儘管我仍然不知道哪個文件夾會循環,但這種行爲會導致您的問題。

可能的解決方案: 禁用未知require處理。

javascript module: { // Disable handling of unknown requires unknownContextRegExp: /$^/, unknownContextCritical: false } Webpack Document for refer

修改後,我的WebPack過程經歷了沒有問題。你可以嘗試一下。

更新

雖然上面的配置可以使的WebPack經歷,然而,問題依然存在。無法解析的需求會在運行時造成問題,最好找到不正確的需求並使其正確。

關於我的情況下,unparseable require

CSV。JS從NPM第三方JS庫,它包含了以下聲明:

var s = new require('stream').Transform({objectMode: true}); 

的WebPack它編譯成

var s = new __webpack_require__(227)('stream').Transform({ objectMode: true }); 

的WebPack立足於做靜態萃取需要,它把該要求沒有說法。

的WebPack認爲代碼

var some = require; 
var s = new some('stream').Transform({ objectMode: true }); 

,而應該是

var some = require('stream') 
var s = new some.Transform({ objectMode: true }) 

所以,我這部分的代碼重寫

var stream = require('stream') 
var s = new stream.Transform({ objectMode: true }) 

問題終於解決了。

因此,找到無效require,使其正確是您唯一的解決方案。

+0

你的答案很不明確。請編輯它以更好地解釋你想說的話(也許偶爾嘗試使用大寫字母)。 – Clonkex

+0

這個答案完全幫助我找到我的問題。我有一個var $ = require && require('jquery')||形式的無法解析的需求。窗口$; 非常感謝幫助我找到這個神祕的問題 –