Как развернуть приложение дартс (используя веб-интерфейс) без использования Pub Deploy
Какова лучшая стратегия для развертывания приложения Dart Web-ui вручную?
Развертывание паба не работает для меня, и я поднял сообщение об ошибке. Поэтому я думаю, что это лучший способ для развертывания вручную.
Вот как я начал:
1) Из корня проекта я компилирую компоненты webui (dwc.dart)
2) изменить каталог на web/out, затем запустить dart2js
3) скопировать все файлы.js в эту общую папку scripts/js на сервере
4) скопируйте appname.html на сервер, изменив пути к css и скриптам для варианта 3
5) Убедитесь, что dart.js также находится в том же каталоге, что и пункт 3
это насколько я понял. Так что еще мне нужно сделать?
Несколько вопросов:
1) Нужно ли вручную изменять пути к файлам в сгенерированных файлах.js, чтобы они указывали на общие папки на сервере для файлов, на которые они ссылаются, и чтобы эти файлы также находились на сервере?
2) Нужно ли копировать все пакеты на сервер?
3) Любая предпочтительная файловая структура на сервере?
Любые советы по этому вопросу действительно приветствуются.
Благодарю.
2 ответа
Я могу предоставить вам сценарий Grunt, чтобы понять порядок задач. Практически порядок, который я использую, таков:
- Создайте каталог сборки. Я обычно использую /build/web. Я обычно создаю эти файлы (index.html, main.dart, /css и т. Д. В директории / web). Я создаю остальные компоненты в каталог /lib.
- Скомпилируйте файл.dart, который содержит файл функции main() (в моем случае "main.dart" для более простых проектов), в Javascript и поместите его в каталог /build/web.
- Скопируйте другие необходимые файлы и папки в каталог /build/web. Кроме того, во время этого процесса вы будете копировать пакеты, которые нужны вашему проекту. Вы увидите в приведенном ниже примере.
- Удалить все пустые папки из проекта
- Вы можете создать задачу Grunt, чтобы открыть файл /index.html в браузере после завершения процесса сборки (я не буду приводить этот пример)
Структура дартс тестового проекта:
testApp
- gruntfile.js
- package.js
/lib
/packages
/angular
/web
- index.html
- main.dart
/css
/img
Итак, пример сценария Grunt, охватывающий шаги с 1 по 4, выглядит следующим образом (скопируйте его в gruntfile.js):
module.exports = function (grunt) {
grunt.initConfig({
// 1.
// create build web directory
mkdir: {
build: {
options: {
create: ['build/web']
}
}
},
// 2.
// compile dart files
dart2js: {
options: {
// use this to fix a problem into dart2js node module. The module calls dart2js not dart2js.bat.
// this is needed for Windows. So use the path to your dart2js.bat file
"dart2js_bin": "C:/dart/dart-sdk/bin/dart2js.bat"
},
compile: {
files: {'build/web/main.dart.js': 'web/main.dart'}
}
},
// 3.
// copy all needed files, including all needed packages
// except the .dart files.
copy: {
build: {
files: [
{
expand: true,
src: [
'web/!(*.dart)',
'web/css/*.css',
'web/res/*.svg',
'web/packages/angular/**/!(*.dart)',
'web/packages/browser/**/!(*.dart)'
],
dest: 'build'
}
]
}
},
// 4.
// remove empty directories copied using the previous task
cleanempty: {
build: {
options: {
files: false
},
src: ['build/web/packages/**/*']
}
},
});
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
grunt.registerTask('default', [
'mkdir:build',
'dart2js',
'copy:build',
'cleanempty:build'
]);
};
Так что это пример сценария Grunt.
Создайте файл /gruntfile.js в корневом каталоге вашего проекта и скопируйте / вставьте в него скрипт.
Создайте файл /package.json в корневом каталоге вашего проекта и скопируйте / вставьте следующий скрипт:
{
"name": "testApp",
"version": "0.0.1",
"description": "SomeDescriptionForTheTestApp",
"main": "",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "YourName",
"peerDependencies": {
"grunt-cli": "^0.1.13"
},
"devDependencies": {
"grunt": "^0.4.5",
"grunt-cleanempty": "^1.0.3",
"grunt-contrib-copy": "^0.7.0",
"grunt-dart2js": "0.0.5",
"grunt-mkdir": "^0.1.2",
"matchdep": "^0.3.0"
}
}
Откройте Командную строку в Windows, Терминал в Linux, перейдите в корневой каталог вашего проекта и используйте эту команду:
npm install
Подождите, пока все необходимые модули Grunt будут загружены в ваш локальный проект. Как только это закончится, введите эту команду в командной строке или терминале:
node -e "require('grunt').cli()"
Вы можете использовать это, чтобы запустить задачу Grunt по умолчанию, не устанавливая Grunt глобально в вашей системе.
Теперь, чтобы узнать точную структуру сборки для вашего проекта (включая пакеты, которые нужны проекту), выполните сборку с помощью Pub Build. Тогда вы сможете поручить Grunt создать ту же самую структуру dir.
Вы можете добавить другие задачи (например, минификацию), если хотите.
Надеюсь, что это поможет вам понять процесс и начать работу с тестовым приложением. Добавьте свои комментарии, чтобы сделать это еще лучше и упростить его еще больше.
Я написал для него скрипт Grunt (так как у меня не было времени искать, как правильно писать код для Grunt, я не делился кодом, потому что это беспорядок), но в основном я делаю это:
- составление списка файлов с dwc для данного
out
реж - скомпилируйте его в javascript
- очистить все неразвертываемые файлы
- изменить некоторые пути внутри HTML, чтобы они соответствовали путям сервера (по некоторым причинам это изменяется в процессе компиляции)
- удалить все пакеты, кроме тех, которые мне действительно нужны (JS interopt и browser)
Поскольку я использую только версию JS, я удаляю все пакеты dart. Поскольку пути внутри файлов HTML зависят от вас, вы уже можете использовать структуру, которая подходит вам / вашему серверу.