Closed3
react-csvをvite環境で使うときのメモ
Reactでcsvを書き出したいときに利用するライブラリreact-csv
を利用していたcra環境をvite環境へ移行した際に手間取ったのでメモ。
下記issueでやり取りされていたようでPRも上がったがCIが通らないという理由でクローズされたまま放置となっている模様。
vite
でビルドすると下記エラーが出る。
yarn dev
> hoge@1.0.0 dev
> vite
Pre-bundling dependencies:
react
react-dom
@sentry/react
@sentry/tracing
axios
(...and 32 more)
(this will be run only when your dependencies or config have changed)
> node_modules/react-csv/src/components/Link.js:110:6: error: Unexpected "<"
110 │ <a
╵ ^
vite
の仕様上.js
ファイルに書かれたjsx
を処理しないことに起因している模様。
(react-csvもTypeScript化はされていないので。。)
issueの中で提案されている下記プラグインを追記することで利用が可能となった。
vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import path from 'path';
// https://vitejs.dev/config/
export default defineConfig(({ command }) => {
return { plugins: [react(), fixReactCsvPlugin(command)], server: {} };
});
function fixReactCsvPlugin(command) {
const esbuildPlugin = {
name: 'esbuild:resolve-fixes',
setup: (build) => {
build.onResolve({ filter: /react-csv$/ }, (args) => {
return Promise.resolve({
path: path.join(process.cwd(), './node_modules/react-csv/index.js'),
});
});
},
};
return {
name: 'resolve-fixes',
config() {
// only use the esbuild plugin during dev ("serve" command)
if (command === 'serve') {
return {
optimizeDeps: {
// development fixes
esbuildOptions: {
plugins: [esbuildPlugin],
},
},
};
}
// build
return {
resolve: {
// production fixes
alias: [
{
find: 'react-csv',
replacement: './node_modules/react-csv/index.js',
},
],
},
};
},
};
}
このスクラップは2022/03/10にクローズされました