Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

babel-plugin-shim-nodejs

Package Overview
Dependencies
Maintainers
1
Versions
27
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

babel-plugin-shim-nodejs

A Babel plugin to shim Node.js global objects and modules.

  • 1.6.0-alpha.fa6ec338
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

babel-plugin-shim-nodejs

Transform server side code to use Node.js shims for the browser.

Example

In

var console = require('console');

console.info('Hello from '+__filename);

Out

var __filename = 'index.js';
var console = require('liferay-node-console');

console.info('Hello from '+__filename);

Installation

npm install --save-dev babel-plugin-shim-nodejs

Usage

Add the following to your .babelrc file:

Without options:

{
  "plugins": ["shim-nodejs"]
}

With options:

{
  "plugins": [
    ["shim-nodejs", {
        "nodeShimsVersion": "1.5.0",
        "globals": {
            "process": "var process = {env: {NODE_ENV: 'production'}}};"
        },
        "modules": {
        }
    }]
  ]
}

Technical Details and Options

This plugins transforms as much as possible Node.js server code to make it work in the browser by using shims.

It assumes that you have deployed frontend-js-node-shims OSGi bundle to your Portal (the bundle is shipped with standard installations by default).

Failure to deploy such bundle will result in Javascript errors due to missing modules.

The plugin supports rewriting of all Node.js v8 globals and builtin modules to make them use the shims. This does not necessarily mean that all server code will work, just that it will try to use the shims, but the shims may not be deployed or may be incomplete.

Consider, for example, that there's no way to fully shim Node.js's child_process module in a browser (in a standard way) so that all npm packages using it may work correctly in the browser.

The usual way to shim globals is to look for their appearance as lone identifiers and prepend a variable declaration for the global on top of the module.

On the other hand, the usual way to shim modules is to rewrite the require() calls to prepend the liferay-node- prefix to the module name so that the deployed shim is loaded instead of failing with a missing module exception.

Of course, if liferay-node-* modules are required after transformation, the transformed package's package.json file must be patched to inject a dependency to the liferay-node-* packages. This is also automatically done by the plugin.

This plugin has several configuration options that can be tweaked to support more globals and/or modules:

  • nodeShimsVersion: by default set to 1.0.0, it specifies the version to use when patching package.json files.
  • globals: holds a map specifying what lines should be prepended to the module code when global identifiers are found in the transformed code. By default it maps Node.js v8 globals to a suitable shimmed value (see globals.js for a more detailed description).
  • modules: holds a map specifying how builtin module names should be rewritten. By default it maps Node.js v8 builtin modules to their name prepended by liferay-node (see modules.js for a more detailed description).

FAQs

Package last updated on 15 Mar 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc