DevExtreme Vue - Add DevExtreme to a Vue Application

One-Command Setup

You can install and configure DevExtreme and its dependencies with a single npx command that is part of the DevExtreme CLI:

npx -p devextreme-cli devextreme add devextreme-vue
NOTE

npx is available with npm v5.2 and later. If you have an earlier version, upgrade npm or install the DevExtreme CLI globally and run the command from the installed package:

npm i -g devextreme-cli
devextreme add devextreme-vue

After you run the command, you can skip the following articles and move on straight to importing DevExtreme components.

If the command is unavailable for any reason, follow the instructions below for manual setup.

Install DevExtreme

Install the devextreme and devextreme-vue npm packages:

npm install devextreme@19.2 devextreme-vue@19.2 --save --save-exact
NOTE
We recommend saving an exact version of DevExtreme to avoid unexpected updates because DevExtreme does not use Semantic Versioning. In our versioning system, the first and middle numbers indicate a major release which may contain behavior changes.

Import Stylesheets

Open the main component file (main.js) and import dx.common.css and a predefined theme stylesheet (dx.light.css in the code below). Alternatively, you can import the stylesheets in the component where DevExtreme widgets are used. The syntax is the same.

main.js
import 'devextreme/dist/css/dx.common.css';
import 'devextreme/dist/css/dx.light.css';
// ...
NOTE
SVG-based widgets do not require theme stylesheets. If you do import the stylesheets, the widgets apply an appearance that matches them.

Import DevExtreme Components

Import the DevExtreme components you are going to use from specific modules. In the following code, the DxButton component is imported:

App.vue
<template>
    <DxButton
        text="Click me"
        @click="sayHelloWorld"
    />
</template>

<script>
import DxButton from 'devextreme-vue/button';

export default {
    components: {
        DxButton
    },
    methods: {
        sayHelloWorld() {
            alert('Hello world!')
        }
    }
}
</script>

Nested DevExtreme components should also be imported (DxArgumentAxis, DxSeries, and DxLegend in the following code):

App.vue
<template>
    <DxChart
        :data-source="data">
        <DxArgumentAxis :tick-interval="10" />
        <DxSeries type="bar" />
        <DxLegend :visible="false" />
    </DxChart>
</template>

<script>
import DxChart, {
    DxArgumentAxis,
    DxSeries,
    DxLegend
} from 'devextreme-vue/chart';

const data = [{
    arg: 1990,
    val: 5320816667
}, {
    arg: 2000,
    val: 6127700428
}, {
    arg: 2010,
    val: 6916183482
}];

export default {
    components: {
        DxChart,
        DxArgumentAxis,
        DxSeries,
        DxLegend
    },
    data() {
        return {
            data
        }
    }
}
</script>

Register 3rd-Party Dependencies

Globalize Registration

If you want to use Globalize for localization, install it and the devextreme-cldr-data extension:

npm install --save-dev devextreme-cldr-data globalize

Then, specify the Globalize and CLDR aliases in the vue.config.js file if you created the application with Vue CLI or in the webpack.config.js file otherwise:

vue.config.js
webpack.config.js
const path = require("path");
module.exports = {
  configureWebpack: {
    resolve: {
      alias: {
        globalize$: path.resolve(__dirname, "node_modules/globalize/dist/globalize.js"),
        globalize: path.resolve(__dirname, "node_modules/globalize/dist/globalize"),
        cldr$: path.resolve(__dirname, "node_modules/cldrjs/dist/cldr.js"),
        cldr: path.resolve(__dirname, "node_modules/cldrjs/dist/cldr")
      },
      extensions: [".ts", ".js", ".json"]
    }
  }
}
const path = require("path");
module.exports = {
  ...
  resolve: {
    alias: {
      globalize$: path.resolve(__dirname, "node_modules/globalize/dist/globalize.js"),
      globalize: path.resolve(__dirname, "node_modules/globalize/dist/globalize"),
      cldr$: path.resolve(__dirname, "node_modules/cldrjs/dist/cldr.js"),
      cldr: path.resolve(__dirname, "node_modules/cldrjs/dist/cldr")
    },
    ...
  },
  ...
}

Refer to the Using Globalize article for usage examples.

Alternatively, you can use Intl as a more lightweight localization solution.

Additional Configuration for Webpack

NOTE
If you created your application with Vue CLI, skip this step.

Open the webpack.config.js file and configure loaders to process CSS and fonts:

webpack.config.js
module.exports = {
  ...
  module: {
    rules: [
      ...
      { 
        test: /\.css$/,
        use: [
          { loader: "style-loader" },
          { loader: "css-loader" }
        ]
      },
      { 
        test: /\.(eot|svg|ttf|woff|woff2)$/, 
        use: "url-loader?name=[name].[ext]"
      }
    ]
  }
}

In addition, open the package.json file and ensure style-loader, css-loader, and url-loader are listed in devDependencies.

Run the Application

Run the application with the following command:

npm run serve

Open http://localhost:8080 to browse the application.

Demos and Code Examples

Refer to the following resources for code samples and usage examples: