gpt4 book ai didi

angular - Angular 构建中何时生成 index.html?

转载 作者:行者123 更新时间:2023-12-05 00:58:10 25 4
gpt4 key购买 nike

我试图弄清楚 Angular 何时在构建阶段生成 index.html 文件,以便之后我可以将其移动到另一个目录。我注意到,当我尝试使用 WebpackShellPlugin 复制文件时,index.htmlonBuildEndonBuildExit 阶段。

Webpack 配置如下:

const WebpackShellPlugin = require('webpack-shell-plugin');

module.exports = {
plugins: [
new WebpackShellPlugin({
onBuildEnd: [
'echo "Files at end of compilation: "',
'ls ./dist/apps/curemedit/'
],
onBuildExit: [
'echo "Copying Popup App contents..."',
'ls ./dist/apps/curemedit/',
'cp -rvf ./dist/apps/curemedit/* ./dist/apps/'
],
safe: true
})
]
};

两种情况下 ls 的输出:

favicon.ico
main.js
main.js.map
manifest.json
polyfills.js
polyfills.js.map
runtime.js
runtime.js.map
styles.js
styles.js.map
vendor.js
vendor.js.map

我有一个用于浏览器扩展的多应用 Angular 工作区。 projectToMove 将用于此扩展的弹出显示。我正在尝试将 dist 中相应文件夹的内容向上移动一级,以便与扩展根目录中的 list 文件一起。

我的猜测是,生成 index.html 文件的这种延迟是由于 ES5 包生成差异加载造成的。我已经设定Chrome >= 61在我的 browserslist 文件中,但事实证明这并没有什么不同。

获取 index.html 文件的正确方法是什么?我应该使用节点脚本更长时间地查看文件夹还是有更优雅的解决方案?

关于我的用例的其他信息:

我正在构建一个浏览器扩展。在它是单个项目的 Angular 工作区之前,实时重新加载使用 webpack-extension-reloader 作为 explained here .现在我有两个单独的 Angular 项目用于弹出显示和选项页面,这两个项目的相应 index.html 页面都需要扩展根文件夹中的 js 和 css 文件。所以现在我用 CopyPlugin、WebpackShellPlugin 和一些可悲的 sed 做了一个丑陋的 hack。

这里是添加的构建配置文件:

ext.config.js:

const CopyPlugin = require('copy-webpack-plugin');
const WebpackShellPlugin = require('webpack-shell-plugin');

module.exports = {
entry: {
background: './src/chrome/background.ts'
},
plugins: [
new CopyPlugin([
{
from: './src/chrome/manifest.json',
to: '../manifest.json'
}
]),
new WebpackShellPlugin({
onBuildExit: [
// Rename sourcemaps, js and css files -> undo chunks' renamings -> move them to extension root
'echo "Moving Options App Contents..."',
'for f in ./dist/apps/proj1/*.js.map; do mv "$f" "${f%.js.map}.proj1.js.map"; done ',
'for f in ./dist/apps/proj1/*.js; do mv "$f" "${f%.js}.proj1.js"; done ',
'mv ./dist/apps/proj1/styles.css ./dist/apps/proj1/styles.proj1.css',
'for f in ./dist/apps/proj1/[0-9].proj1.js; do mv "$f" "${f%.proj1.js}.js"; done ',
'for f in ./dist/apps/proj1/workspace*.proj1.js; do mv "$f" "${f%.proj1.js}.js"; done ',
'for f in ./dist/apps/proj1/workspace*.proj1.js.map; do mv "$f" "${f%.proj1.js.map}.js.map"; done ',
'mv -v ./dist/apps/proj1/* ./dist/apps/'
],
safe: true
})
]
};

ext.popup.js:

const WebpackShellPlugin = require('webpack-shell-plugin');

module.exports = {
plugins: [
new WebpackShellPlugin({
onBuildExit: [
'echo "Moving Popup App Contents..."',
'for f in ./dist/apps/proj2/*.js.map; do mv "$f" "${f%.js.map}.proj2.js.map"; done ',
'for f in ./dist/apps/proj2/*.js; do mv "$f" "${f%.js}.proj2.js"; done ',
'mv ./dist/apps/proj2/styles.css ./dist/apps/proj2/styles.proj2.css',
'mv -v ./dist/apps/proj2/* ./dist/apps/'
],
safe: true
})
]
};

sed.sh:

#!/bin/sh

sed -i 's/.js/.proj1.js/g' ./dist/apps/proj1/index.html
sed -i 's/styles.css/styles.proj1.css/g' ./dist/apps/proj1/index.html
sed -i 's/.js/.proj2.js/g' ./dist/apps/proj2/index.html
sed -i 's/styles.css/styles.proj2.css/g' ./dist/apps/proj2/index.html

package.json:

"build": "rm -rf ./dist/ && ng build proj1 && ng build proj2 && ./sed.sh",
"buildprod": "rm -rf ./dist/ && ng build proj1 --prod && ng build proj2 --prod && ./sed.sh"

最佳答案

我不完全了解您的用例,但希望这会有所帮助。

Angular CLI 允许配置 index 属性。默认情况下,这只是一个指定 index.html 文件在您的 src 目录中的位置的路径。输出路径将与输入路径相同。但 CLI 也接受指定输入路径和输出路径的对象。

该属性深深嵌套在 angular.json 文件中。在新生成的应用程序中,它位于 projects > project-name > architect > build > index .

"index": {
"input": "src/index.html",
"output": "../index.html"
}

这会将 index.html 文件置于其他文件之上一层。不幸的是,这不会改变对 index.html 文件中其他文件的引用。这仍然需要在外面完成。我认为这是一个错误,因此创建了 bug report .

关于angular - Angular 构建中何时生成 index.html?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58581263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com