6

Я использую Grunt для сборки пакета Durandal starter kit pro.Исключая файл от оптимизации в Durandal build

Все работает отлично, за исключением одной крошечной детали. Я хотел бы исключить из оптимизатора один файл (app-config ниже) и сохранить его как файл без мини-файла, когда моя сборка будет выполнена.

Основываясь на других предложениях SO, я в настоящее время исключаю его, используя empty:, который удаляет его из оптимизированного файла, как и ожидалось. Тем не менее, когда я открываю построен проект, я получаю сообщение об ошибке в консоли:

Uncaught Error: main missing app-config

options: { 
    name: '../lib/require/almond-custom', 
    baseUrl: requireConfig.baseUrl, 
    mainPath: 'app/main', 
    paths: mixIn({ }, requireConfig.paths, { 
     'almond': 'lib/require/almond-custom', 
     'app-config': 'empty:' 
    }), 
    optimize: 'none', 
    out: 'build/app/main.js', 
    preserveLicenseComments: false 
} 

Является ли миндальное проблема? Я попытался переключить его на полный requirejs, используя include: ['path/to/require'], без успеха.

Если вы хотите воспроизвести его локально, вы можете загрузить комплект стартера из приведенной выше ссылки или использовать slightly configurated version, который ближе к моему примеру. Просто запустите npm install в папке, и все готово.

+0

Итак, я уже видел это, и я даже не очень хорошо знаком с durandal, но на странице [github] (https://github.com/RainerAtSpirit/HTMLStarterKitPro), в объект 'options', они показывают свойство, называемое' exclude', которое принимает массив ... –

+0

@anied Спасибо за подсказку. Да, я попробовал как «empty:», так и свойство exclude, и в результате получилось одно и то же исключение. – Johan

ответ

3

Я скачал вас source code и сделаю следующие шаги.

  1. Извлечь zip-файл, открыть cmd и сменить каталог на эту папку.
  2. Запустите npm install, чтобы установить все зависимости.
  3. Запустите grunt, чтобы начать строить проект.

И когда я открываю http://localhost:8999/ и увидел предупреждение 1, который находится в вашем main.jsalert(appConfig.foo);. После нажатия Ok, чтобы скрыть предупреждение, веб-страница работает штрафами. Вам больше нужен вход?

First step

Second step

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

+0

Важно, чтобы вы запускали задачу 'grunt build', а не задание' grunt' по умолчанию, чтобы попробовать построить :) Извините, что не упомянули об этом. – Johan

+0

Я видел проблему, но не видел здесь ничего плохого. Если я полностью удалю app-config для определения путей и перейдя в определение как «../app-config.js», он отлично работает, но app-config.js включен в main.js. Позвольте мне немного подумать. Я понятия не имею, что такое миндаль, но вы, возможно, захотите увидеть этот вопрос. http://stackoverflow.com/questions/15515872/inline-require-working-in-requirejs-but-not-with-optimized-almond-build – trungk18

+0

Если проблема с миндалем, то вместо этого можно использовать requirejs. Он также включен в папку 'lib' ... – Johan

0

Из обращения к durandal проблем, обнаруженных в этой конкретной ссылке grunt-durandal

Основной модуль контролирует реализацию durandal services Ссылку можно найти в main.js

Здесь вы можете увидеть систему. debug (true). Вы можете удалить его, как написано в сообщении здесь document.

Эта функция приведена в статье Overrides request execution timeout making it effectively infinite.

Также при использовании uglify в grunt отладка устанавливается в false в соответствии с документацией.

Согласно documentation, вам необходимо установить систему.debug (false)

Надеюсь, это может немного помочь.

0

попробовать:

.... 
paths: mixIn({ }, requireConfig.paths, { 
    'almond': ['lib/require/almond-custom', '!lib/require/almond-custom/app-config.js'] 
}), 
.... 

просто обратите внимание на второй путь app-config.js правильно. Я думаю, вы должны найти свой путь, выше это намек, если не прямое решение.

+0

Не могли бы вы уточнить, что это на самом деле делает? – Johan