8

我试图在markdown不产生太多开销的情况下捆绑文件(即不手动将它们添加到 Xcode 和 Android Studio 中的资产包,不使用 3rd 方依赖项)。

我的想法是允许require()通过调整 Metro bundler 设置来包含它们metro.config.js

/**
 * Metro configuration for React Native
 * https://github.com/facebook/react-native
 *
 * @format
 */

module.exports = {
    transformer: {
        getTransformOptions: async () => ({
            transform: {
                experimentalImportSupport: false,
                inlineRequires: false,
            },
        }),
    },
    resolver: {
        assetExts: [`md`] // < include md
    }
};

遗憾的是,metro bundler 将给定默认值的数组替换为此处设置的值。

我不想明确重复列出大约 20 多个文件扩展名的默认资产扩展名列表,特别是因为我想坚持使用默认值。请参阅:https ://github.com/facebook/metro/blob/master/packages/metro-config/src/defaults/defaults.js 。

附加到数组也不起作用。

使用 RN 0.59.3。

有什么我想念的吗?

4

2 回答 2

15

在此处找到有关如何包含默认值的答案:https ://stackoverflow.com/a/55118654/844907 。

/**
 * Metro configuration for React Native
 * https://github.com/facebook/react-native
 *
 * @format
 */

// get defaults assetExts array
const defaultAssetExts = require("metro-config/src/defaults/defaults").assetExts;

module.exports = {
    transformer: {
        getTransformOptions: async () => ({
            transform: {
                experimentalImportSupport: false,
                inlineRequires: false,
            },
        }),
    },
    resolver: {
        assetExts: [
            ...defaultAssetExts, // <- array spreading defaults
            'md'
        ]
    }
};
于 2019-04-03T06:29:39.543 回答
3

其他可以做到这一点的方法是使用与react-native-svg-transformer相同的语法

  1. 使 metro.config.js 异步
  2. 调用 getDefaultConfig
  3. 拉出assetExts键

例子

const { getDefaultConfig } = require('metro-config')

module.exports = (async () => {
    const {
        resolver: { assetExts },
    } = await getDefaultConfig()
    return {
        transformer: {
            getTransformOptions: async () => ({
                transform: {
                    experimentalImportSupport: false,
                    inlineRequires: false,
                },
            }),
        },
        resolver: {
            assetExts: [...assetExts, 'md'],
        },
    }
})()
于 2019-08-24T07:47:14.897 回答