Ris*_*rna 2 firefox-addon google-chrome-extension webpack angular
我试图弄清楚 Angular 在构建阶段何时生成index.html文件,以便之后我可以将其移动到另一个目录。我注意到,当我尝试使用 复制文件时WebpackShellPlugin,index.html在onBuildEnd和onBuildExit阶段都不在 dist/projectToMove 目录中。
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 中相应文件夹的内容向上移动一级,以便它与扩展根目录中的清单文件一起。
我的猜测是,生成index.html文件的这种延迟是由于 ES5 包生成差异加载。我已经Chrome >= 61
在我的browserslist文件中设置 
了这个项目,但事实证明这并没有什么不同。
获取 index.html 文件的正确方法是什么?我应该使用节点脚本更长时间地观看文件夹还是有更优雅的解决方案?
关于我的用例的其他信息:
我正在构建一个浏览器扩展。在它是单个项目角度工作区之前,实时重新加载使用 webpack-extension-reloader 进行工作,如此处所述。现在我有两个单独的 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
包.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。这仍然需要在外面完成。我认为这是一个错误,因此创建了一个错误报告。
| 归档时间: | 
 | 
| 查看次数: | 5024 次 | 
| 最近记录: |