是否可以从webpack中的文件名中删除特殊字符?

Got*_*bbs 5 javascript dynamics-crm webpack

长话短说,我的资产文件名中不能有像连字符这样的字符.我没有运气解析通过webpack文档解析是否可以使用正则表达式或类似的东西重命名文件,所以我可以从第三方包中删除任何连字符,我不控制源文件名.

我的超级天真的例子是这样的:

{
    test: /\.(ttf|eot|woff|woff2)$/,
    loader: `url-loader?limit=${ASSETS_LIMIT}&name=fonts/[name.replace(/-/)].[ext]`
}
Run Code Online (Sandbox Code Playgroud)

有谁知道这是否可能或者如何达到这个要求?谢谢!

Got*_*bbs 0

这个谜题的答案似乎可以在customInterpolateName加载器选项中找到。使用 webpack@v3.4.1 以下是我删除连字符的最终结果。

这是关键的花絮:

plugins: [
    // ... other plugins ...
    new webpack.LoaderOptionsPlugin({
        options: {
            customInterpolateName: (loaderContext) => {
                return loaderContext.replace(/-/g, '');
            }
        }
    })
]
Run Code Online (Sandbox Code Playgroud)

下面是一个更完整的示例,可提供一些上下文(注意:.css特意将 附加到字体文件名,作为 Dynamics CRM 中另一个 Web 资源名称限制的解决方法):

module.exports = {
    // ... other config ...
    module: {
        loaders: [
            // ... other loaders ...
            {
                test: /\.(ttf|eot|woff|woff2)$/,
                loader: `url-loader?limit=${ASSETS_LIMIT}&name=fonts/[name].[ext].css`
            }
        ]
    },

    plugins: [
        // ... other plugins ...
        new webpack.LoaderOptionsPlugin({
            options: {
                customInterpolateName: (loaderContext) => {
                    return loaderContext.replace(/-/g, '');
                }
            }
        })
    ]
};
Run Code Online (Sandbox Code Playgroud)