Ответ 1
Я использую задачу grunt-contrib-requirejs для создания проекта на основе require.js. Установите его в каталог проекта с помощью
npm install grunt-contrib-requirejs --save-dev
BTW: --save-dev
добавит пакет к вашим зависимостям разработки в вашем пакете. json. Если вы не используете package.json в своем проекте, проигнорируйте его.
Загрузите задачу в файл grunt с помощью
grunt.loadNpmTasks('grunt-contrib-requirejs');
И добавьте конфигурацию в свой файл grunt.initConfig
requirejs: {
production: {
options: {
baseUrl: "path/to/base",
mainConfigFile: "path/to/config.js",
out: "path/to/optimized.js"
}
}
}
Теперь вы можете создать свой материал require.js в один файл, который будет сведен к минимуму с помощью uglifyjs, запустив grunt requirejs
Вы можете связать набор различных задач с какой-то основной задачей, добавив это в свой файл grunt
grunt.registerTask('default', ['lint', 'requirejs']);
С помощью этого можно просто ввести grunt
, и grunt автоматически выполнит задание по умолчанию с двумя "подзадачами": lint и requirejs.
Если вам нужна специальная производственная задача: определите ее как указано выше
grunt.registerTask('production', ['lint', 'requirejs', 'less', 'copy']);
и запустите его с помощью
grunt production
Если вам нужно различное поведение для "производства" и "развития" внутри задачи, то есть задачи requirejs, вы можете использовать так называемые цели. В приведенном выше примере конфигурации он уже определен как production
. Вы можете добавить еще одну цель, если вам нужно (BTW, вы можете определить глобальную конфигурацию для всех целей, добавив объект опций на один уровень)
requirejs: {
// global config
options: {
baseUrl: "path/to/base",
mainConfigFile: "path/to/config.js"
},
production: {
// overwrites the default config above
options: {
out: "path/to/production.js"
}
},
development: {
// overwrites the default config above
options: {
out: "path/to/development.js",
optimize: none // no minification
}
}
}
Теперь вы можете запускать их оба одновременно с grunt requirejs
или индивидуально с помощью grunt requirejs:production
, или вы определяете их в разных задачах с помощью:
grunt.registerTask('production', ['lint', 'requirejs:production']);
grunt.registerTask('development', ['lint', 'requirejs:development']);
Теперь, чтобы ответить на ваши вопросы:
-
Я бы определенно использовал подпапку в вашем проекте. В моем случае я использую папку "src" для разработки, которая встроена в папку "htdocs" для производства. Предпочитаемый вариант проекта:
project/ src/ js/ libs/ jquery.js ... appname/ a.js b.js ... main.js // require.js starter index.html ... build/ ... //some tmp folder for the build process htdocs/ ... // production build node_modules/ ... .gitignore grunt.js package.json
-
см. выше
-
Вы можете сделать это, но я бы не рекомендовал добавлять requirejs в задачу просмотра, это ресурсная голодная задача, и это замедлит работу вашего компьютера.
И последнее, но не менее важное: будьте очень осторожны, когда играете с r.js. Особенно, если вы хотите оптимизировать весь проект с помощью r.js, добавив директиву modules
в свою конфигурацию. R.js удалит выходной каталог без запроса. Если произойдет случайное конфигурирование вашего системного корня, r.js удалит ваш жесткий диск. Будьте осторожны, я полностью удалил всю свою папку htdocs некоторое время назад при настройке моей задачи grunt... Всегда добавляйте keepBuildDir:true
к своим параметрам при игре с конфигурацией r.js.