webpack - 如何在 webpack4 manifest.json 中为 *ALL* .js、.css 和 .png 资源设置关键前缀?

标签 webpack manifest webpack-4 manifest.json survivejs

我正在开始使用 Webpack

我安装了[email protected]

我得到它生成组装的js和css文件,并移动img文件

当我运行 webpack 时,我得到

pub/bld/
├── css
│   └── common.css
├── img
│   └── image.jpg
└── js
    └── common.js

现在我想生成一个manifest.json

我安装了[email protected]

我配置了

const ManifestPlugin = require('webpack-manifest-plugin');
module.exports = () => ({
    plugins: [
        new ManifestPlugin({
            fileName: 'manifest.json',
        })
    ]
});

现在,当我运行 webpack 时,会添加 manifest.json

pub/bld/
├── css
│   └── common.css
├── img
│   └── image.jpg
├── js
│   ├── runtime_manifest.js
│   └── common.js
└── manifest.json

对于这些文件,会生成此 list .json

{
  "common.css": "css/common.css",
  "common.js":  "js/common.js",
  "runtime_manifest.js": "js/runtime_manifest.js",
  "img/image.jpg": "img/image.jpg",
}

我不明白为什么“*.img”文件的 list 键有“img/”前缀 但 '*.js' 和 '*.css' 键则不然。

我想最终得到像这样一致的东西

{
  "css/common.css": "css/common.css",
  "js/common.js":  "js/main.js",
  "js/runtime_manifest.js": "js/runtime_manifest.js",
  "img/image.jpg": "img/image.jpg",
}

我想它需要不同的配置。

还不知道如何做到这一点。

我需要在配置中添加或更改什么?

感谢任何帮助!

编辑1:

git clone https://github.com/atown2/wt1
cd wt1
yarn install
rm -rf pub/bld
yarn run w-d
cat pub/bld/manifest.json
    {
      "common.css": "bld/css/common.css",
      "common.js": "bld/js/common.js",
      "runtime_manifest.js": "bld/js/runtime_manifest.js",
      "vendor.js": "bld/js/vendor.js",
      "img/image.jpg": "bld/img/image.jpg"
    }
rm -rf pub/bld
yarn run w-p
cat pub/bld/manifest.json
    {
      "common.css": "bld/css/common.29a2491a64f9fa0bb242.css",
      "common.js": "bld/js/common.06c02ae762fab74de1c2.js",
      "vendor.js": "bld/js/vendor.f8169ef54a3835cf9193.js",
      "runtime_manifest.js": "bld/js/runtime_manifest.f4c47723a9293e3db34d.js",
      "img/image.jpg": "bld/img/image.e910e1baeaab6869d39e369296aad8f5.jpg"
    }

最佳答案

问题是 list 插件根据条目选择名称。要进行调整,请实现 map :

exports.Manifest = () => ({
  plugins: [
    new WebpackManifest({
      fileName: 'manifest.json',
      filter: (file) => !file.path.match(/\.map$/),
      map: (file) => {
        const extension = path.extname(file.name).slice(1)

        return {
          ...file,
          name: ['css', 'js'].includes(extension) ?
            `${extension}/${file.name}` :
             file.name
        }
      }
    })
  ]
});

关于webpack - 如何在 webpack4 manifest.json 中为 *ALL* .js、.css 和 .png 资源设置关键前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52139737/

相关文章:

来自 gradle.properties 的 Android manifestPlaceholders

reactjs - 哪个加载器适合处理 React JSX?

webpack css 优化和缩小

reactjs - 如何让react-hot-loader与webpack 2和webpackDevMiddleware一起使用?

angular - NG2 Cli 模块发现和加载

java - 构建gradle失败。 Facebook取消后在 list 中失败

symfony - 使用Webpack Encore ^ 0.21.0时,未知的“encore_entry_link_tags”功能

javascript - 如何创建 Vue 3 自定义元素,包括子组件样式?

javascript - 如何使用 webpack 4 简单地加载具有 src 属性的图像?

Android:可以安装apk但打不开(打开灰显)