コード整形ツールの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>