ブラウザで使用するためsvelte用のprettierプラグインをUMD版でビルドする備忘録

コード整形ツールのPrettierをブラウザで使用する
コード整形ツールのPrettierをブラウザで使用する2(php編)
svelte用のprettierプラグインprettier-plugin-svelteのエラー対処の備忘録
これらの記事の延長線でsvelteをブラウザでprettierにかけたかったときの備忘録。例によって現状公式のパーサー一覧にはsvelteがない。
thebells1111氏プルリクを参考にする。
thebells1111氏svelte-prettier-browser-plugin-demoというデモも行っている。
加えてUMD化はplugin-phpを参考にする。standalone化するときのコミットログとrollup.config.jsが特に重要。

UMD化

大元はprettier-plugin-svelteを使用する。

git clone https://github.com/sveltejs/prettier-plugin-svelte
cd https://github.com/sveltejs/prettier-plugin-svelte
npm install

必要な追加パッケージをインストールする。

npm install rollup-plugin-alias
npm install rollup-plugin-replace
npm install rollup-plugin-babel
npm install rollup-plugin-json
npm install rollup-plugin-terser
npm install @babel/core
npm install @babel/preset-env
npm install buffer

plugin-phpのrollup.config.jsを修正

import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import typescript from 'rollup-plugin-typescript';

import alias from "rollup-plugin-alias";
import replace from "rollup-plugin-replace";
import babel from "rollup-plugin-babel";
import json from "rollup-plugin-json";
import { terser } from "rollup-plugin-terser";

export default {
    input: "src/index.ts",
    output: {
        file: "standalone.js",
        format: "umd",
        name: "prettierPlugins.svelte",
        exports: "named",
        globals: {
            prettier: "prettier",
        },
        paths: {
            prettier: "prettier/standalone",
        },
    },
    external: ["prettier", "svelte"],
    plugins: [
        resolve({
            preferBuiltins: true,
        }),
        commonjs(),
        typescript(),
        alias({
            entries: [
                {
                    find: "assert",
                    replacement: "assert.js",
                },
            ],
        }),
        replace({
            "process.arch": JSON.stringify("x32"),
        }),
        json(),
        babel({
            babelrc: false,
            plugins: [],
            compact: false,
            presets: [
                [
                    require.resolve("@babel/preset-env"),
                    {
                        targets: {
                            browsers: [
                                ">0.25%",
                                "not ie 11",
                                "not op_mini all",
                            ],
                        },
                        modules: false,
                    },
                ],
            ],
        }),
        terser(),
    ],
};

src/embed.ts, src/lib/snipTagContent.tsはthebells1111氏プルリクに従う。
src/lib/browser.tsは

export const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';
import { Buffer } from 'buffer/';
export const browserBuffer = Buffer;

とする。
src/index.ts は

import { parse } from 'svelte/compiler';

を追加して

                return <ASTNode>{ ...require(`svelte/compiler`).parse(text), __isRoot: true };

この部分を

                return <ASTNode>{ ...parse(text), __isRoot: true };

へと修正する。
これをビルドしてstandalone.jsを作成する。

npm run build

使い方は他のプラグインと同様。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Browser Prettier</title>
<meta charset="utf-8">
</head>
<body>
    <script src="https://unpkg.com/prettier@2.0.5/standalone.js"></script>
    <script src="standalone.js"></script>
 
    <script>
      const TestCode = `
      //test code
const testa= "aaa"
 const  testb  =   "bbb"
  const   testc  =   "cccc"
`;
      const result = prettier.format(TestCode, {
        parser: "svelte",
        plugins: prettierPlugins,
      });
      console.log(result);
/*
//test code
const testa = "aaa";
const testb = "bbb";
const testc = "cccc";
*/
    </script>
</body>
</html>

シェアする

  • このエントリーをはてなブックマークに追加

フォローする