npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@talend/scripts-config-react-webpack

v16.8.1

Published

Webpack configuration for @talend/scripts-core

Downloads

996

Readme

Webpack config customisation

Your folder hierarchy should follow

<root>
    |_ src
        |_ app
            |_ index.js
        |_ assets
        |_ settings
    |_ cmf.json
    |_ package.json
    |_ talend-scripts.js(on)

| Folder/File | Description | | ---------------- | ------------------------------------------------------------------------------------------------------------------------------ | | src/app | Your application code | | src/app/index.js | Your entry point | | assets | The assets such as images. This folder content is copied via copy-webpack-plugin. | | settings | Your settings. This can be changed, depending or your cmf.json configuration, but DO NOT put the settings in assets. |

Configuration overview

{
	"preset": "@talend/scritps-preset-react",
	"cmf": true,
	"html": {
		"title": "Talend Data Preparation",
		"other-options": "Option value passed to html-webpack-plugin"
	},
	"sass": {
		"data": {
			"$brand-primary": "#4F93A7",
			"$brand-primary-t7": "#00A1B3",
			"$brand-secondary-t7": "#168AA6"
		},
		"theme": "tdp"
	},
	"css": {
		"modules": false,
		"prefix": "resources/"
	},
	"js": {
		"prefix": "resources/"
	},
	"webpack": {
		"debug": true,
		"config": {
			"development": "./webpack.config.dev.js",
			"production": "./webpack.config.prod.js"
		}
	},
	"dynamic-cdn-webpack-plugin": {
		"exclude": ["react-router-dom"]
	},
	"sentry": {
		"org": "talend",
		"project": "tmc",
		"include": ["dist"],
		"ignore": ["dist/cdn"]
	}
}

| Preset variable | Description | | --------------- | --------------------------------------------------------- | | cmf | cmf-webpack-plugin flag. | | html | html-webpack-plugin template and options customisation. | | sass | sass-loader customisation. | | css | css-loader customisation. | | js | js customisation. | | webpack | webpack and devServer customisation. | | sentry | sentry release config. |

HTML

{
	"preset": "talend",
	"html": {
		"title": "Talend Data Preparation",
		"other-options": "Option value passed to html-webpack-plugin"
	}
}

| html options | type | description | | ------------- | ------ | ------------------------------------------------------ | | title | string | fill the title tag in head | | meta | object | add <meta name="objectkey" content="object value" /> | | template | string | default to src/app/index.html | | appId | string | id of your app will be used in many places | | appLoaderIcon | string | base64 encoded version of icon to use as AppLoader | | ...rest | | rest will be passed to HTML webpack plugins |

by default the configuration will try to find custom html to add to the default

Meta tags

You can use the option meta which exists in the HTML webpack plugin like this:

{
	"html": {
		"meta": { "metaname": "metavalue", "bis": "foo" }
	}
}

This is quite simple to use and understand but not enough flexible to add other attributes to the tag.

For more advanced use case talend-scripts will try to read .talend/head.html and will insert the results in the head tag.

Template

By default you don't need to provide a template. The configuration will try to find the file but if not found it will fallback to our default template.

To customize html output you have the following options:

  • add src/app/index.html only if you need to remove things from the current output
  • add .talend/head.html so you can add anything in the head.
  • add .talend/body.html so you can add anything in the body (useful for react portals).

Note: if you do not use our template you will have to add support for options.

App loader in a custom template

By default, a static app loader is available to be displayed during your webapp download. The loader contains the Talend logo.

If you have a custom template and you want to use it, you must deal with the html-webpack-plugin option named appLoader.

<html>
	<body>
		<div id="app"><%= htmlWebpackPlugin.options.appLoader %></div>
	</body>
</html>

To change the logo, you can customise the appLoaderIcon variable in configuration.

{
	"preset": "talend",
	"html": {
		"appLoaderIcon": "url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDov+"
	}
}

Sass/Css

You can pass all sass variables you need. Those will be loaded before any sass file.

{
	"preset": "talend",
	"sass": {
		"data": {
			"$brand-primary": "red"
		}
	}
}

In case you want to load one of T7+ @talend/bootstrap-theme variation, you can pass the variation name.

{
	"preset": "talend",
	"sass": {
		"theme": "tdp"
	}
}

By default, css modules are activated. To deactivate them,

{
	"preset": "talend",
	"css": {
		"modules": false
	}
}

Webpack

You can add the debug option to true so the webpack configuration will be printed to the output.

{
	"preset": "talend",
	"webpack": {
		"debug": true
	}
}

CMF

Talend preset integrates cmf-webpack-plugin. By default it is deactived, to enable it:

{
	"preset": "talend",
	"cmf": true
}

It has an incompatibility with copy-webpack-plugin. To use it correctly

  1. Create your settings.json, be careful not to create it in one of the folders copied by copy-webpack-plugin. Otherwise you'll end up in an infinite loop.
  2. Create a cmf.json at your app root folder and configure it. Important : remove the destination property. cmf-webpack-plugin will output the result in a settings.json in the webpack output folder.
  3. In your cmf app index file, you can fetch the settings from /settings.json.

Versions

Some variables are injected as global.

| Variable | Description | | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | BUILD_TIMESTAMP | The built timestamp. | | TALEND_APP_INFO | Versioning of current app and @talend libs. To get the libs git SHA1, you need to provide sha1.json containing the sha of the packages (example below). | | TALEND_APP_INFO.version | Current app version (from package.json). | | TALEND_APP_INFO.revision | Current app version last commit SHA1 (determined with git rev-parse HEAD). | | TALEND_APP_INFO.talendLibraries | @talend libs infos (name, SHA1 if provided in sha1.json, version from package.json). |

To include the git SHA1 of each talend libraries version, you need to provide a sha1.json, mapping the libraries with their SHA1. Note that the librairies from @talend/ui will be gather into 1 library info.

Example

sha1.json

{
	"@talend/dataset": "785a5552a4b",
	"@talend/rating": "156c32bc15",
	"@talend/ui": "8c8cb6544fe"
}

package.json

{
	"version": "3.6.0",
	"dependencies": {
		"@talend/react-components": "^2.6.0",
		"@talend/react-forms": "^2.6.0",
		"@talend/dataset": "1.5.0",
		"@talend/sharing": "1.2.1"
	}
}

Result (TALEND_APP_INFO)

const TALEND_APP_INFO = {
	version: '3.6.0',
	revision: '654fe645b5c84',
	talendLibraries: [
		{
			name: '@talend/ui',
			version: '^2.6.0',
			revision: '8c8cb6544fe',
		},
		{
			name: '@talend/dataset',
			version: '1.5.0',
			revision: '785a5552a4b',
		},
		{
			name: '@talend/sharing',
			version: '1.2.1',
			revision: undefined,
		},
	],
};

whyDidYouRender

This package bundles automatically for dev only whyDidYouRender library to help you investigate React rendering issues.

webpack-bundle-analyzer and inspectpack/plugin

You can add these plugin by passing --env analyze option to your start / build webpack command.

How to use?

// log only if rendering occurs while props values are the same
Component.whyDidYouRender = true;

Component.whyDidYouRender = {
	logOnDifferentValues: true, // log on every change of props
	customName: 'Menu', // change the name of the log for this component
};

If your component is cmf connected you also can do the following

{ "props": { "MyComponent#its-component-id-or-default": { "whyDidYouRender": true } } }

Route basename

If you want to serve the app under a basename, set a BASENAME environment variable before start.

{
	"scripts": {
		"start": "BASENAME=/tdc/ talend-scripts start"
	}
}

Sentry

Sentry config is only used for build script in production mode. If you add this config it will:

  1. Create a new release for your project on Sentry. Release version will be taken from package.json's version.
  2. Upload sourcemaps to Sentry.
{
	"sentry": {
		"org": "talend-0u",
		"project": "tmc",
		"include": ["dist"],
		"ignore": ["dist/cdn"]
	}
}

| sentry options | type | description | | -------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | org | string | Optional. The slug of the organization to use for a command. Defaults to 'talend-0u'. It also can be configured by environment variable SENTRY_ORG. | | project | string | Required. The slug of the Sentry project associated with the app. It also can be configured by environment variable SENTRY_PROJECT. | | include | string/array/object | Optional. One or more paths that Sentry CLI should scan recursively for sources. It will upload all .map files and match associated .js files. Defaults to ["dist"]. More info here. | | ignore | string/array | Optional. One or more paths to ignore during upload, defaults to ["cdn"], so sourcemaps inside dist/cdn won't be uploaded as default. |

Sentry authToken is also required. It's the authentication token to use for all communication with Sentry. Can be obtained from https://sentry.io/settings/account/api/auth-tokens/. Required scopes: project:releases (and org:read if setCommits option is used). There're several ways to configure authToken. You can choose a convient one to configure it for CI. Sentry CLI will pick up these configurations automatically.

  1. Environment variables:
> SENTRY_AUTH_TOKEN=[yourToken] talend-scripts build
  1. Config file: provide a .sentryclirc in the root of your app, with your token and other info.
[defaults]
org=[yourOrg]
project=[yourProjectId(eg. tmc)]

[auth]
token=[yourToken]

For more information, see Sentry CLI configuration values

dynamic-cdn-webpack-plugin

This entry let you pass options to the plugin @talend/dynamic-cdn-webpack-plugin.

If you want you can also pass false to desactivate the plugin.

{
	"preset": "@talend/scritps-preset-react",
	"dynamic-cdn-webpack-plugin": false
}