1. rollup-plugin-natives
Extract native modules (.node files) while creating a rollup bundle and put them in one place
rollup-plugin-natives
Package: rollup-plugin-natives
Created by: danielgindi
Last modified: Thu, 17 Aug 2023 07:42:51 GMT
Version: 0.7.8
License: MIT
Downloads: 4,389
Repository: https://github.com/danielgindi/rollup-plugin-natives

Install

npm install rollup-plugin-natives
yarn add rollup-plugin-natives

rollup-plugin-natives

npm Version

Extract native modules (.node files) while creating a rollup bundle and put them in one place"

Installation

 npm install --save-dev rollup-plugin-natives

Usage

In some cases you have native dependencies (usually required by bindings or node-pre-gyp)
and you have to put them somewhere accessible to the rolled-up bundle.
This package is just for doing exactly this.

 // rollup.config.js
import nativePlugin from 'rollup-plugin-natives';

export default {
    input: 'main.js',
    output: {
        file: 'dist/bundle.js',
        format: 'cjs'
    },
    plugins: [
        nativePlugin({
            // Where we want to physically put the extracted .node files
            copyTo: 'dist/libs',

            // Path to the same folder, relative to the output bundle js
            destDir: './libs',

            // Use `dlopen` instead of `require`/`import`.
            // This must be set to true if using a different file extension that '.node'
            dlopen: false,

            // Modify the final filename for specific modules
            // A function that receives a full path to the original file, and returns a desired filename
            map: (modulePath) => 'filename.node',

            // OR you can have a function that returns a desired file name and a specific destination to copy to.
            map: (modulePath) => { name: 'filename.node', copyTo: 'C:\\Dist\\libs\\filename.node' },

            // A transformer function that allows replacing a given node module path with another.
            // This is good for either handling missing files, or dynamically resolving desired architectures etc.
            originTransform: (path: string, exists: boolean) => (path: string|undefined),
            
            // Generate sourcemap
            sourcemap: true,
            
            // If the target is ESM, so we can't use `require` (and .node is not supported in `import` anyway), we will need to use `createRequire` instead.
            targetEsm: false,
        })
    ]
};

Using with node-pre-gyp

node-pre-gyp way of determining the require path is supported only if the module code matches (almost) exactly the recommended method, ie if it looks like this:

 const binary = require('@mapbox/node-pre-gyp');
const binding_path = binary.find(path.resolve(path.join(__dirname, '../package.json')));
const module = require(binding_path);

License

MIT

About...

This plugin was created by me and shared with you courtesy of Silverbolt which I'm working for.

RELATED POST

Enhancing Vue.js Development: Harnessing the Potential of Vue-Loader

Enhancing Vue.js Development: Harnessing the Potential of Vue-Loader

Simplify Data Validation in Vue.js: A Step-by-Step Guide to Using Regex

Simplify Data Validation in Vue.js: A Step-by-Step Guide to Using Regex

Troubleshooting Made Easy: Common Issues and Solutions with vue-loader Without vue-cli

Troubleshooting Made Easy: Common Issues and Solutions with vue-loader Without vue-cli

Optimizing Webpack 4 with Vue CLI 3: Disabling the Cache-Loader

Optimizing Webpack 4 with Vue CLI 3: Disabling the Cache-Loader

Step-by-Step Guide: How to Add a Function to Your Vuex Plugin

Step-by-Step Guide: How to Add a Function to Your Vuex Plugin