2017-04-01 126 views
2

我recieving:語法錯誤:意外的令牌:PUNC())

語法錯誤:意外的令牌:PUNC())從UglifyJS

並將其指向全局變量API_URL的第一個字母。 我有這樣實現的:

export default reduxApi({ 
    campaigns: { 
    url: `${API_URL}/api/v1/whatever`, 
    transformer (response) { 
     if (!response) return {} 
     return response.data 
    } 
    } 
}).use('fetch', adapterFetch(fetch)).use('options', { 
    headers: getRequestHeaders() 
}) 

如果我刪除全局變量下鍵url

export default reduxApi({ 
    campaigns: { 
    url: `/api/v1/whatever`, 
    transformer (response) { 
     if (!response) return {} 
     return response.data 
    } 
    } 
}).use('fetch', adapterFetch(fetch)).use('options', { 
    headers: getRequestHeaders() 
}) 

然後一切工作正常。有任何想法嗎?爲什麼uglify會拋出這種錯誤?

+0

你的意思是'url',你的意思是'$ {API_URL}'? – rckrd

+0

@rckrd編輯。現在應該可以理解了。 – turkus

+1

謝謝。如何設置'$ {API_URL}'? – rckrd

回答

0

我決定在這裏寫一個解決方案。我不必安裝其他uglify-js軟件包版本。關鍵是要以適當的方式解決對物體的輸入問題。在我的情況下,API_URL是一個全局變量。所以Uglify不確定它是否被定義,這就是它拋出錯誤的原因。

爲了解決這個問題我以這種方式使用webpack externals

// ------------------------------------                        
// Externals 
// ------------------------------------ 
webpackConfig.externals = { 
    config: JSON.stringify(require(`./${__DEV__ ? 'development' : 'production'}.json`)),             
} 

它只是把JSON配置對象到config可變,這取決於環境(developmentproduction)。您只需將development.jsonproduction.json放在您定義webpackConfig.externals的文件旁邊。

然後在我的情況下,你定義它,讓我們在development.json說:

{ 
    "apiUrl": "http://localhost:5000" 
} 

然後最後在你的代碼:

... // other imports 
import config from "config" 

export default reduxApi({ 
    campaigns: { 
    url: `${config.apiUrl}/api/v1/whatever`, 
    transformer (response) { 
     if (!response) return {} 
     return response.data 
    } 
    } 
}).use('fetch', adapterFetch(fetch)).use('options', { 
    headers: getRequestHeaders() 
}) 

,它就像一個魅力。

希望能幫助別人。

3

Uglify不完全支持ES6,template literals included。你可以track the conversation on Github。有一個支持ES6的harmony branch。您可以通過替換您的package.json項中的分支進行醜化到:

"uglify-js": "git+https://github.com/mishoo/UglifyJS2.git#harmony" 

或者,你可能想通過transpiler微小之前先通過代碼。這樣,所有的語法都將成爲Uglify非常瞭解的ES5。如果您希望某些ES6語法保持不變,您可能需要調整轉換器配置。

+0

我使用了你的提示,我將它添加到了我的package.json中,但我認爲還有更多的事情要做,因爲我使用https://github.com/davezuko/react-redux-starter-kit並使用你的建議它不起作用。也許還有其他的依賴關係? – turkus

相關問題