2016-07-06 57 views
2

所以這是我的任務:反應告訴我,我在開發中使用精縮...

gulp.task('prod', function() { 
    browserify({entries: [ 
    'resources/assets/js/app.js' 
    ]}) 
    .transform("babelify") 
    .transform(envify({ 
    NODE_ENV: 'production' 
    })) 
    .bundle() 
    .pipe(source('all.js')) 
    .pipe(buffer()) 
    .pipe(sourcemaps.init({loadMaps: true})) 
    .pipe(uglify()) 
    .on('error', gutil.log) 
    .pipe(gulp.dest('public/js/')); 
}); 

但控制檯依然最高審計機關:

all.js:30 Warning: It looks like you're using a minified copy of the development build of React. When deploying React apps to production, make sure to use the production build which skips development warnings and is faster. See [url here that stack doesn't like] for more details. 

所以我很困惑。這是怎麼回事?

+0

它可能是陌生的,但你可以嘗試更換'NODE_ENV:「production''到'NODE_ENV:JSON.stringify(」生產「)'? –

回答

3

當運行構建過程中,設置NODE_ENV像這樣(Linux版):

NODE_ENV=production gulp build 

或(Windows)中

SET NODE_ENV=production 
gulp build 

如果添加構建腳本到您的package.json - 你可以運行NPM :

npm run --production build 

或者你可以嘗試修改scrips:

... 
    .transform(envify({ 
    'process.env.NODE_ENV': 'production' 
    })) 
    ... 

但這取決於我konw什麼版本envify您使用

+0

如果你知道JavaScript中的對象,你會知道'process.env.NODE_ENV'是一個非法的密鑰,因爲'.' – TheWebs

+0

@TheWebs不正確。對象屬性名稱的確可以包含'.'字符(以及字面或轉義序列提供的大多數其他Unicode字符)。在Evgeniy的例子中,鍵是作爲一個字符串提供的,所以'.'字符將被解釋爲 - 字符串中的字符。事實上,所有的JS對象屬性/鍵名都被強制轉換爲幕後的字符串。 – jamison

+0

...除了符號,它顯然不被強制爲字符串(這是旁邊的這個問題的目的,但我想澄清這爲未來的讀者) – jamison

0

您應該爲生產捆綁使用縮小反應版本。自己縮小反應代碼不是解決方案,因爲有很多條件,例如:process.env.NODE_ENV !== 'production'

你可以看看here

我們提供了兩個版本陣營:用於開發和未壓縮版本的縮小版本進行生產。開發版本包含關於常見錯誤的額外警告,而生產版本包含額外的性能優化並去除所有錯誤消息。

所以,你應該用react.min.js/node_modules/react/dist而不是/node_modules/react/lib/React生產束。

+1

我不知道有什麼辦法在縮小版本的反應中做一個require語句...我只是使用'進口反應'從'react'' – TheWebs

+0

這是不正確的。進行縮小自己絕對是一個解決方案。事實上,它通常被認爲是首選的方法。預先打包的獨立腳本包含嵌入的所有依賴關係(庫,助手,填充/填充等),因此您將失去其他庫中共享依賴重複數據消除的好處,以及對顯式依賴關係版本聲明的控制權。所有主要的捆綁器/構建系統都有導出或欺騙你提到的條件檢查的環境變量的方法。 – jamison

相關問題