All Projects → jihchi → vite-plugin-rescript

jihchi / vite-plugin-rescript

Licence: MIT license
Integrate ReScript with Vite seamlessly

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to vite-plugin-rescript

rollup-plugin-typescript-paths
Rollup Plugin to automatically resolve path aliases set in the compilerOptions section of tsconfig.json.
Stars: ✭ 32 (-42.86%)
Mutual labels:  rollup-plugin
rollup-plugin-generate-html-template
Rollup plugin for automatically injecting a script tag with the final bundle into an html file.
Stars: ✭ 58 (+3.57%)
Mutual labels:  rollup-plugin
blurhash-as
Blurhash implementation in AssemblyScript
Stars: ✭ 26 (-53.57%)
Mutual labels:  rollup-plugin
rollup-plugin-collect-sass
Collect Sass, then compile
Stars: ✭ 17 (-69.64%)
Mutual labels:  rollup-plugin
rollup-plugin-tagged-template
Use plain HTML files as tagged templates.
Stars: ✭ 24 (-57.14%)
Mutual labels:  rollup-plugin
postcss-font-grabber
A postcss plugin, it grabs remote font files and update your CSS, just like that.
Stars: ✭ 26 (-53.57%)
Mutual labels:  rollup-plugin
rollup-plugin-external-globals
Transform external imports into global variables like output.globals.
Stars: ✭ 57 (+1.79%)
Mutual labels:  rollup-plugin
rollup-plugin-html-entry
Use HTML files as entry points in your rollup bundle.
Stars: ✭ 13 (-76.79%)
Mutual labels:  rollup-plugin
rollup-plugin-purs
Bundles PureScript modules with Rollup
Stars: ✭ 71 (+26.79%)
Mutual labels:  rollup-plugin
vite-plugin-psvg
PSVG for Vite
Stars: ✭ 36 (-35.71%)
Mutual labels:  vite-plugin
rollup-plugin-markdown
import JavaScript from Markdown code blocks
Stars: ✭ 16 (-71.43%)
Mutual labels:  rollup-plugin
vite-rollup-plugins
A compatibility list of rollup plugins for Vite 2 and test playground
Stars: ✭ 76 (+35.71%)
Mutual labels:  rollup-plugin
Purgecss
Remove unused CSS
Stars: ✭ 6,566 (+11625%)
Mutual labels:  rollup-plugin
rollup-plugin-sizes
Rollup plugin to display bundle contents & size information
Stars: ✭ 77 (+37.5%)
Mutual labels:  rollup-plugin
app-template-rescript-react
Adding ReScript with rescript-react on top of @snowpack/app-template-react
Stars: ✭ 44 (-21.43%)
Mutual labels:  rescript-react
rollup-plugin-copy-assets
Copy additional assets into the output directory of your rollup bundle.
Stars: ✭ 25 (-55.36%)
Mutual labels:  rollup-plugin
svelte-typescript
Typescript monorepo for Svelte v3 (preprocess, template, types)
Stars: ✭ 214 (+282.14%)
Mutual labels:  rollup-plugin
vite-plugin-theme-preprocessor
css theme preprocessor plugin for vite
Stars: ✭ 144 (+157.14%)
Mutual labels:  vite-plugin
rollup-plugin-stylus-css-modules
A Rollup.js plugin to compile Stylus and inject CSS Modules
Stars: ✭ 15 (-73.21%)
Mutual labels:  rollup-plugin
vite-plugin-html-template
html template for vite, like html-webpack-plugin for webpack.
Stars: ✭ 97 (+73.21%)
Mutual labels:  vite-plugin

@jihchi/vite-plugin-rescript

Workflows - CI npm package bundlephobia size npm download per month npm license

Integrate ReScript with Vite by:

  • Starting ReScript compilation automatically
  • Showing HMR overlay for ReScript compiler errors
  • Importing .res files directly (see Using Loader)

Getting Started

If you are looking for a template to quickly start a project using Vite, ReScript and React, take a look at vitejs-template-react-rescript, the template depends on this plugin.

# npm
npm i -D @jihchi/vite-plugin-rescript

# yarn
yarn add -D @jihchi/vite-plugin-rescript

# pnpm
pnpm i -D @jihchi/vite-plugin-rescript

Configure your vite plugin in vite.config.ts:

import { defineConfig } from 'vite';
import createReScriptPlugin from '@jihchi/vite-plugin-rescript';

export default defineConfig({
  plugins: [createReScriptPlugin()],
});

If you're using require syntax:

const { default: createReScriptPlugin } = require('@jihchi/vite-plugin-rescript');

Using Loader

The plugin comes with support for loading .res files directly. This is optional and in most cases not necessary, but can be useful in combination with "in-source": false. When using "in-source": false (without the loader), importing local files using relative paths is troublesome. Take for example the following code:

%%raw(`import "./local.css"`)
@module("./local.js") external runSomeJs: unit => unit = "default"

The bundler will fail when reaching this file, since the imports are resolved relative to the generated JS file (which resides in lib), but the .css and .js files are not copied into this directory. By utilizing the loader it no longer fails since the bundler will resolve the files relative to the .res file instead.

Configuration

The loader is configured to support lib/es6 output with .bs.js suffix by default. This can be changed by providing an options object to the plugin:

export default defineConfig({
  plugins: [
    createReScriptPlugin({
      loader: {
        output: './lib/js',
        suffix: '.mjs',
      },
    }),
  ],
});

Note: It is recommended to use .bs.js suffix since the loader cannot otherwise distinguish between imports of regular JS files and those that were generated by the ReScript compiler.

Note: Using es6-global module format may cause issues with imports of ReScript node modules, since the paths to the node_modules will be generated as relative to the lib folder.

Setup

For HTML entry points, it must be imported using inline JS:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vite App</title>
  </head>
  <body>
    <div id="root"></div>
    <script type="module">
      import '/src/Main.res';
    </script>
  </body>
</html>

If using Vite with library mode, just use the .res as entry point:

import { defineConfig } from 'vite';
import createReScriptPlugin from '@jihchi/vite-plugin-rescript';

export default defineConfig({
  plugins: [createReScriptPlugin()],
  build: {
    lib: {
      entry: 'src/Main.res',
    },
  },
});

Contributors

Many thanks for your help!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].