build - Rollup + Typescript fejl ved import af filer uden for baseUrl


Jeg har sammensat et rollup-buildsystem, der tager en mappe med Typescript-komponenter og eksporterer dem som moduler.

Byggesystemet fungerer perfekt, hvis komponentfilerne ligger inden for mappestrukturen:

src/components/Button

men problemet opstår, når jeg prøver at importere dem udefra baseUrl, hvilket betyder:

../../javascript/components/Button

Så snart jeg prøver dette, får jeg følgende fejl:

[!] Error: The keyword 'interface' is reserved

Sådan ser min tsconfig-fil ud:

{
    "compilerOptions": {
        "jsx": "react",
        "module": "es2015",
        "target": "es2017",
        "moduleResolution": "node",
        "noImplicitAny": true,
        "noImplicitReturns": true,
        "noImplicitThis": true,
        "noUnusedLocals": true,
        "strictNullChecks": true,
        "sourceMap": true,
        "baseUrl": ".",
        "preserveSymlinks": true,
        "esModuleInterop": true,
        "paths": {
            "ui": ["../../components"]
        }
    },
    "include": ["src/**/*.tsx"],
    "exclude": ["node_modules"]
}

og min rollup.config

import typescript from 'rollup-plugin-typescript2';
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import less from 'rollup-plugin-less';
import alias from 'rollup-plugin-alias';

const plugins = [
    alias({
        ui: '../../components',
        resolve: ['.tsx', '.ts', '.less']
    }),
    resolve(),
    commonjs({
        // All of our own sources will be ES6 modules, so only node_modules need to be resolved with cjs
        include: 'node_modules/**',
        namedExports: {
            'node_modules/react/index.js': [
                'Component',
                'PropTypes',
                'createElement'
            ],
            'node_modules/lodash/lodash.js': ['isEmpty', 'isString']
        }
    }),
    less({ insert: 'true' }),
    typescript()
];

export default {
    plugins,
    external: ['react'],
    input: './src/main.js',
    output: {
        sourcemap: true,
        file: './lib/index.js',
        format: 'cjs'
    }
};

Tusind tak på forhånd!!!

Svar #1

Efter at have undersøgt i et stykke tid, fandt jeg ud af, at @rollup/plugin-typescript som standard kun transformerer filer inde i projektets rodmappe. For at tilsidesætte denne adfærd skal du angive i include-indstillingen for plugin’et de glob-mønstre for de filer, du planlægger at bruge, inklusive filerne inde i dit projekt.

import ...


const plugins = [
    /* ... */
    typescript({
      include: [
        // Project files
        './**/*.ts+(|x)',
        // Files from outside of the project
        '../../javascript/**/*.ts+(|x)'
      ]
    })
];

export default {
    /* ... */
};

Du vil også skulle gøre dette i din 'tsconfig.json', fordi plugin'et vil klage over, at de eksterne filer ikke er opført i din tsconfig.

Relaterede artikler