2015-05-07 2 views
0

Я недавно начал изучать хрюканье, и я сделал это, опробовав семена .Grunt, развертывание облаков и скомпилированные файлы

Он использует gruntfile для копирования статических активов, CSS, JavaScript в папку назначения с этим кодом:

dist_js: { 
    files: [{ 
     src: ['<%= app_files.js %>', '<%= vendor_files.js %>'], 
     dest: '<%= dist_dir %>/public', 
     cwd: '.', 
     expand: true 
    }] 
} 

где dist_dir является 'расстояние'.

Теперь в файлах конфигурации указано, что в процессе развития мы хотим служить активы, ЦСИ и файлы поставщика из исходного местоположения, поэтому конфигурация курьерским для развития выглядит следующим образом:

app.use('/assets', express.static(path.resolve(__dirname, '../assets'))); 
app.use('/src', express.static(path.resolve(__dirname, '../../src'))); 
app.use('/vendor', express.static(path.resolve(__dirname, '../../vendor'))); 

В производстве , код:

app.use(express.static(path.join(__dirname, 'public'))); 

Когда я двигаю это производство (в частности, к OpenShift), шаблон index.html подается со всеми тегами сценария и ссылок, но скрипты и CSS не найдены. То, что я получаю, это «Невозможно GET file.css», например.

Я запускаю сборку и компиляцию на облаке, а вывод «Готово без ошибок», но файлы нигде не найдены. Я пробовал слишком много вещей, и у меня кончились идеи. Я пропустил что-то принципиальное о ворчании?

EDIT: Проблема заключалась в том, что файлы javascript, выполняющие маршрутизацию, расположены внутри src/server, поэтому __dirname указывает на это местоположение. Однако Grunt выполнил копирование внутри корня проекта.

app.use(express.static(path.join(__dirname, '../../dist/public'))); 

Это устранило проблему.

+0

Можете ли вы опубликовать немного больше о своей структуре каталогов? –

+0

Я клонировал семя (https://github.com/ng-vu/ng-express-boilerplate) и еще не изменился, просто добавил некоторые переменные сдвига, чтобы запустить его правильно в облаке (также добавлено действие крючок для ворчания). – Nirri

+0

В любом случае вы можете разместить ссылку на свой git repo? –

ответ

0

Вам необходимо разоблачить свои активы маршрутом.

app.use(express.static(path.join(__dirname, 'dist/public')));

Вам нужно изменить файл package.json вызвать крякнул после запуска НПМ установки. Для этого добавьте следующее.

"scripts": { 
    "start": "node ./src/server/app.js", 
    "postintall": "grunt build; grunt compile" 
} 

Кроме того, было бы неплохо определить новую задачу, которая объединяет эти две задачи.

Gruntfile.js

grunt.registerTask("prep-for-cloud", [ "compile", "build" ]); 

Тогда ваш package.json будет выглядеть следующим образом.

"scripts": { 
    "start": "node ./src/server/app.js", 
    "postintall": "grunt prep-for-cloud" 
} 

Кроме того, вы должны добавить grunt-cli в файл package.json как зависимость.

+0

Является ли сценарий .openshift \ action_hooks \ build не в порядке?Из-за того, что мои журналы ввода указывают, что компиляция grunt и компиляция grunt запускаются? – Nirri

+0

Честно говоря, лучше всего поместить его в свой пакет 'package.json' как функцию узла и позволит вам лучше перемещать ваше приложение через облака. –

+0

Хорошо, но это просто разные способы сделать то же самое, и это не помогло решить проблему 404. Я поместил его в скрипт сборки, потому что вам нужно изменить домашние каталоги на openshift, таким образом, мне не нужно менять файл package.json каждый раз, когда я запускаю его в процессе разработки. – Nirri

Смежные вопросы