👏

Rollup + Typescript + Vue2 (+ vue-property-decorator) コンパイル手順

2023/10/20に公開

rollupのインストール

$ npm install --global rollup

rollup.config.tsファイルを作成

最もシンプルな設定の場合

// rollup.config.ts
export default {
	input: 'src/main.ts',
	output: {
		file: 'bundle.js',
		format: 'cjs'
	}
};

input に単一ファイルを指定する
Outputに出力したい形式を指定
Pluginに適宜必要なファイルに応じて定義

コンパイルしたいファイルに合わせてプラグインをimport

import commonjs from "@rollup/plugin-commonjs";
import json from "@rollup/plugin-json"
import typescript from "@rollup/plugin-typescript";
import vue from "rollup-plugin-vue";
import copy from 'rollup-plugin-copy';
import scss from 'rollup-plugin-scss';
import postcss from 'rollup-plugin-postcss';
import babel from "@rollup/plugin-babel";

index.tsファイルを作成し、コンパイルしたいファイルをまとめる

import SomeFunction from ‘./path/to/hogehoge.ts’
// 定義が複数ある場合は
import * as ManyFunction from ‘./path/to/manyFunction.ts’

export {
  SomeFunction,
  ManyFunction
}

tsconfig.jsonでrollup.config.tsをincludeする

"include": [
        "rollup.config.ts" ⇦ typescriptではここでrollup.config.tsを読み込めるようにする
    ],

設定関連の注意事項

※Vue2の場合はpackage.jsonでrollup-plugin-vueのバージョンを"rollup-plugin-vue": "^5.0.0”,をインストールする必要がある
※vue-property-decoratorで利用しているとdecoratorの部分でエラーなる

[!] RollupError: Unexpected character '@' (Note that you need plugins to import files that are not JavaScript)
lib/scripts/replay_modal.ts (14:0)
12: // } from '../../../ink-helper/index'
13: import { LOG } from "./Utilities.mjs";
14: @Component({

tsconfig.jsonで"experimentalDecorators": trueにする

tsconfig.json

{
 "compilerOptions": {
        "resolveJsonModule": true,
        "forceConsistentCasingInFileNames": true,
        "strict": true,
        "experimentalDecorators": true, ⇦これを追加する
    }
}

Discussion