Webpack/Angular CLI - как встраивать скрипты в HTML вместо того, чтобы ссылаться на них?
Я создаю экономичное приложение Angular, которое следует запускать локально через file://
URL. Вindex.html
файл будет прикреплен и развернут через безголовый браузер, и я не могу использовать HTTP-сервер в качестве решения. Локальный запуск файла вызовет ошибки Cross Origin, как описано здесь.
Решение, которое я придумал, которое работает (!) - заменить все <script src="..."/>
ресурсы (которые связаны с ng build --prod
) с <script>...</script>
. На данный момент делаю это вручную.
С выходом index.html
от моего ng build
будучи:
<script src="runtime-es2015.1eba213af0b233498d9d.js" type="module"></script><script src="runtime-es5.1eba213af0b233498d9d.js" nomodule defer></script><script src="polyfills-es5.9e286f6d9247438cbb02.js" nomodule defer></script><script src="polyfills-es2015.690002c25ea8557bb4b0.js" type="module"></script><script src="main-es2015.3bdd714db04c3d863447.js" type="module"></script><script src="main-es5.3bdd714db04c3d863447.js" nomodule defer></script>
Я меняю его на:
<script type="module">//content of runtime-es2015.1eba213af0b233498d9d.js//</script><script nomodule defer>//content of runtime-es5.1eba213af0b233498d9d.js//</script><script nomodule defer>//content of polyfills-es5.9e286f6d9247438cbb02.js//</script><script type="module">//content of polyfills-es2015.690002c25ea8557bb4b0.js//</script><script type="module">//content of main-es2015.3bdd714db04c3d863447.js//</script><script nomodule defer>//content of main-es5.3bdd714db04c3d863447.js//</script>
Я ищу способ автоматизировать это через скрипт сборки.
Спасибо.
1 ответ
Это решение, которое я в конце концов придумал gulp
:
Я побежал npm install --save-dev
в пакеты gulp
, gulp-inline
а также del
.
После создания gulpfile.js
в корневой каталог я написал следующий код:
let gulp = require('gulp');
let inline = require('gulp-inline');
let del = require('del');
gulp.task('inline', function (done) {
gulp.src('dist/index.html')
.pipe(inline({
base: 'dist/',
disabledTypes: 'css, svg, img'
}))
.pipe(gulp.dest('dist/').on('finish', function(){
done()
}));
});
gulp.task('clean', function (done) {
del(['dist/*.js'])
done()
});
gulp.task('bundle-for-local', gulp.series('inline', 'clean'))
Задание inline
заменит все <script src="..."></script>
с соответствующим содержимым файла.clean
затем удалил бы все .js
файлы.
Наконец-то я обновил свой package.json
с новым скриптом сборки:
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"build-for-local": "ng build --prod --aot && gulp bundle-for-local",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
Сейчас npm run build-for-local
сделаю работу.