Optimizely JavaScript SDK
This repository houses the JavaScript SDK for Optimizely X Full Stack.
Getting Started
Installing the SDK
The SDK is available through npm. To install:
npm install @optimizely/optimizely-sdk-core --save
Or to use in a non CommonJS fashion:
- Run
npm run build
- Pull in
dist/optimizely.browser.umd.min.js
as a <script>
- Use as global variable
window.optimizelyClient
Migrating from 1.x.x
This version represents a major version change and, as such, introduces some breaking changes:
-
We have changed the package name to more accurately reflect the implementation of the SDK. Instead of using optimizely-sdk
, we have migrated it to optimizely-sdk-core
as this contains the core functionality of the SDK and leaves out things like datafile management. Instead the new optimizely-sdk
package will be a wrapper around optimizely-sdk-core
that will include more advanced functionality such as datafile management and event dispatch retries and can be used straight out of the box with minimal config. More on this later!
-
The Node SDK is now combined with the JavaScript SDK so that we have one optimizely-sdk-core
package that works across both server + browser environments.
-
You will no longer be able to pass in revenue
value as a stand-alone argument to the track
call. Instead you will need to pass it as an entry in the eventTags
.
-
We no longer support legacy Node versions (under 4.0)
Using the SDK
See the Optimizely X Full Stack testing developer documentation to learn how to set up your first JavaScript project and use the SDK.
Development
Installing dependencies
npm install
Unit tests
You can run all unit tests with:
npm test
Build distribution packages
npm run build
This command will build several distribution bundles under the dist
directory:
- optimizely.browser.cjs.js - This is the main entry point for browser/client-side bundles
- optimizely.browser.umd.js - This is used when not packaging the optimizely-sdk with your own JS bundles. Instead you would load this script as a
<script>
tag and reference it via the global var optimizelyClient
- optimizely.node.js - This is the main entry point for Node apps
The browser bundles also come with a minified / production-ready version.
Environment Variables
The .yml of this project contains environment vairables for BROWSER_STACK_USERNAME
and BROWSER_STACK_ACCESS_KEY
.
These variables, created in BrowserStack, are encrypted by the TravisCI public key. This is done directly with the TravisCI command line tools; for additional information see travis encrypt-file.
Contributing
Please see CONTRIBUTING.
2.0.0-beta1
March 29th, 2018
This major release of the Optimizely SDK introduces APIs for Feature Management. It also introduces some breaking changes listed below.
New Features
- Introduces the
isFeatureEnabled
API to determine whether to show a feature to a user or not.
var enabled = optimizelyClient.isFeatureEnabled('my_feature_key', 'user_1', userAttributes);
- You can also get all the enabled features for the user by calling the following method which returns a list of strings representing the feature keys:
var enabledFeatures = optimizelyClient.getEnabledFeatures('user_1', userAttributes);
- Introduces Feature Variables to configure or parameterize your feature. There are four variable types:
Integer
, String
, Double
, Boolean
.
var stringVariable = optimizelyClient.getFeatureVariableString('my_feature_key', 'string_variable_key', 'user_1');
var integerVariable = optimizelyClient.getFeatureVariableInteger('my_feature_key', 'integer_variable_key', 'user_1');
var doubleVariable = optimizelyClient.getFeatureVariableDouble('my_feature_key', 'double_variable_key', 'user_1');
var booleanVariable = optimizelyClient.getFeatureVariableBoolean('my_feature_key', 'boolean_variable_key', 'user_1');
Breaking changes
- The
track
API with revenue value as a stand-alone parameter has been removed. The revenue value should be passed in as an entry of the event tags map. The key for the revenue tag is revenue
and will be treated by Optimizely as the key for analyzing revenue data in results.
var eventTags = {
'revenue': 1200
};
optimizelyClient.track('event_key', 'user_id', userAttributes, eventTags);
- The package name has changed from
optimizely-client-sdk
to optimizely-sdk
as we have consolidated both Node and JavaScript SDKs into one.