2014-07-23 52 views
2

我正在嘗試爲我正在創建的應用程序使用Mean.io,並且我基本上沒有改變原始配置文件中的任何內容,並且當我啓動此應用程序時heroku在生產模式下,它不正確彙總dist文件並給我Meanman中的assetmanager不能在生產模式下工作

「無法加載資源:服務器響應的狀態爲404(Not Found)http://****.herokuapp。 COM/bower_components /建設/ CSS/dist.min.css 「」

同樣適用於JS文件的相關文件看起來像這樣: Assets.json: {

"core": { 
    "css": { 
     "bower_components/build/css/dist.min.css": [ 
      "bower_components/met_theme/global/css/components.css" 
     ] 
    }, 
    "js": { 
     "bower_components/build/js/dist.min.js": [ 

      "bower_components/angular/angular.js", 
      "bower_components/angular-mocks/angular-mocks.js", 
      "bower_components/angular-cookies/angular-cookies.js", 
      "bower_components/angular-resource/angular-resource.js", 
      "bower_components/angular-ui-router/release/angular-ui-router.js", 
      "bower_components/angular-bootstrap/ui-bootstrap.js", 
      "bower_components/angular-bootstrap/ui-bootstrap-tpls.js", 
      "bower_components/met_theme/global/scripts/datatable.js", 
      "bower_components/met_theme/global/scripts/metronic.js" 
     ] 
    } 
} 
} 

在我的gruntfile:

grunt.initConfig({ 
    pkg: grunt.file.readJSON('package.json'), 
    assets: grunt.file.readJSON('config/assets.json'), 
    // later on 
      uglify: { 
     core: { 
      options: { 
       mangle: false 
      }, 
      files: '<%= assets.core.js %>' 
     } 
    }, 
    csslint: { 
     options: { 
      csslintrc: '.csslintrc' 
     }, 
     src: paths.css 
    }, 
    cssmin: { 
     core: { 
      files: '<%= assets.core.css %>' 
     } 
    }, 

我可以看到這是一個生產vs發展中的錯誤,如果我改變我的express.js的assetmanager目標文件:

var assets = assetmanager.process({ 
    assets: require('./assets.json'), 
    debug: process.env.NODE_ENV !== 'development', 
    webroot: /public\/|packages\//g 
}); 

與之相對to!=='生產'它在本地給我同樣的問題。我對加載文件的這種方式並不是很熟悉,我似乎無法找到任何解決方案,因此任何能夠提供答案或指向正確方向的人都會非常感激。

+0

您在heroku中設置NODE_ENV? 'heroku配置:設置NODE_ENV =生產' –

+0

是的,就像我說的那樣,assetmanager構建dist文件的方式正在進行。 –

+0

我有同樣的問題 –

回答

1

我們正處於推出產品的最後階段,實際上我們需要做一些聚合。

原來並不容易。

做最簡單的方法是,這是NODE_ENV =永遠的生產開始server.js

但是,這只是沒有爲我們工作和吐出來在控制檯上的錯誤。

我們assets.json看起來像這樣

"bower_components/jquery/dist/jquery.min.js", 
"bower_components/socket.io-client/socket.io.js", 
"bower_components/fullcalendar/fullcalendar.min.js", 
"bower_components/tinymce/tinymce.min.js", 
"bower_components/select2/select2.min.js", 
"bower_components/angular/angular.js",   
"bower_components/angular-ui-calendar/src/calendar.js", 
"bower_components/checklist-model/checklist-model.js", 
"bower_components/angular-ui-tinymce/src/tinymce.js", 
"bower_components/angular-elastic/elastic.js", 
"bower_components/angular-ui-select2/src/select2.js", 
"bower_components/angular-ui-utils/ui-utils.min.js", 
"bower_components/angular-ui-router/release/angular-ui-router.min.js", 
"bower_components/angular-bootstrap/ui-bootstrap.min.js", 
"bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js", 
"bower_components/ng-file-upload/angular-file-upload.min.js", 

的一套的gruntfile擁有生產清潔步驟,醜化然後cssmin。

我喜歡的劇本模式,這樣

#!/bin/sh 
grunt clean 
grunt concat 
grunt uglify 
grunt cssmin 
NODE_ENV=envname forever --uid "appname" -a start server.js 

不管怎麼說,這兩種方法確實爲我們工作。我認爲當按照正確的順序加載內容時,uglification已經完成了,並且最終導致了一堆控制檯錯誤。

我們所要做的就是重寫我們的assets.json,將其分解爲jquery依賴和角度依賴,然後加載jquery依賴,然後加載角度依賴。也許有一些我們正在使用的衝突庫,導致了這個問題。

即使上述方法爲您工作,仍存在進一步的聚集問題。例如=> tinymce會告訴你,它現在正在查看插件文件夾,主題文件夾和外觀文件夾的bower_components/dist/js。

所以後來我們不得不改變這

#!/bin/sh 
grunt clean 
grunt concat 
grunt uglify 
grunt cssmin 
cp -r bower_components/tinymce/plugins bower_components/build/js/ 
cp -r bower_components/tinymce/skins bower_components/build/js/ 
cp -r bower_components/tinymce/themes bower_components/build/js/ 
NODE_ENV=envname forever --uid "appname" -a start server.js 

顯然不是一個漂亮的腳本,但是這對我們來說什麼工作。 NODE_ENV =生產,絕對沒有自己的伎倆。

相關問題