Как использовать узел "модуль" с пакетом babel? - PullRequest
0 голосов
/ 10 февраля 2020

Я создал пакет узла foo, с {"type": "module"}, определенным в его package.json. Это приводит к тому, что JavaScript файлы ведут себя как модули ES6 .

Мое веб-приложение использует foo и настроено с использованием накопительного пакета и babel. Конечно, это поддерживает модули ES6 и будет способствовать лучшей веб-поддержке. Однако он отказывается загружать мой foo пакет, потому что

require() of ES module is not supported.

Это сбивает меня с толку, потому что я нигде не использую require, я используя синтаксис ES6 import для импорта foo. Почему накопительный пакет не может передать этот проект и как я могу это исправить?


РЕДАКТИРОВАТЬ

(я использую сапер, и вот мой rollup config)

client: {
    input: config.client.input(),
    output: config.client.output(),
    plugins: [
        replace({
            'process.browser': true,
            'process.env.NODE_ENV': JSON.stringify(mode)
        }),
        svelte({
            dev,
            hydratable: true,
            emitCss: true
        }),
        resolve({
            browser: true,
            dedupe
        }),
        commonjs(),

        legacy && babel({
            extensions: ['.js', '.mjs', '.html', '.svelte'],
            runtimeHelpers: true,
            exclude: ['node_modules/@babel/**'],
            presets: [
                ['@babel/preset-env', {
                    targets: '> 0.25%, not dead'
                }]
            ],
            plugins: [
                '@babel/plugin-syntax-dynamic-import',
                ['@babel/plugin-transform-runtime', {
                    useESModules: true
                }]
            ]
        }),

        !dev && terser({
            module: true
        })
    ],

    onwarn,
},

Я полагаю, что это как-то связано с тем, что проект сначала переносится в общий js перед вводом в babel, поэтому babel видит все как общие js модули и поэтому отказ от импорта пакета ESM (модуль ES6).


EDIT 2

Примечание: серверная часть компилируется нормально, поэтому я включил только конфигурацию клиента , Вот и конфигурация сервера:

server: {
    input: config.server.input(),
    output: config.server.output(),
    plugins: [
        replace({
            'process.browser': false,
            'process.env.NODE_ENV': JSON.stringify(mode)
        }),
        svelte({
            generate: 'ssr',
            dev
        }),
        resolve({
            dedupe
        }),
        commonjs()
    ],
    external: Object.keys(pkg.dependencies).concat(
        require('module').builtinModules || Object.keys(process.binding('natives'))
    ),

    onwarn,
}
...