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

时间:2017-08-08 21:38:08

标签: javascript webpack dynamics-crm

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

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

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

有人知道这是否可行或者如何达到此要求?谢谢!

1 个答案:

答案 0 :(得分:0)

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

这是关键的花絮:

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

这里有一个更完整的示例来提供一些上下文(注意:.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, '');
                }
            }
        })
    ]
};