Compare commits

...

1 Commits

Author SHA1 Message Date
5f7f9c0d4c feat: handle csp, extract css 2023-01-28 23:52:11 +08:00
5 changed files with 52 additions and 10 deletions

View File

@ -1,3 +1,7 @@
## 6.5.2
* Added `dist/csp/*` to support strict CSP with extracted CSS file.
## 6.5.1 ## 6.5.1
* Fixed types for mouse events. * Fixed types for mouse events.

View File

@ -227,7 +227,7 @@ Drop `<script>` inside your HTML file and access the component via `window.VueEC
```html ```html
<script src="https://cdn.jsdelivr.net/npm/vue@3.2.37"></script> <script src="https://cdn.jsdelivr.net/npm/vue@3.2.37"></script>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.3.3"></script> <script src="https://cdn.jsdelivr.net/npm/echarts@5.3.3"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.5.1"></script> <script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.5.2"></script>
``` ```
<!-- vue3Scripts:end --> <!-- vue3Scripts:end -->
@ -247,7 +247,7 @@ app.component('v-chart', VueECharts)
```html ```html
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.5"></script> <script src="https://cdn.jsdelivr.net/npm/vue@2.7.5"></script>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.3.3"></script> <script src="https://cdn.jsdelivr.net/npm/echarts@5.3.3"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.5.1"></script> <script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.5.2"></script>
``` ```
<!-- vue2Scripts:end --> <!-- vue2Scripts:end -->
@ -453,6 +453,10 @@ Vue-ECharts support the following events:
See supported events [here →](https://echarts.apache.org/en/api.html#events) See supported events [here →](https://echarts.apache.org/en/api.html#events)
## CSP: `style-src` or `style-src-elem`
If you are applying a CSP to prevent inline `<style>` injection, you need to use files from `dist/csp` directory and include `dist/csp/style.css` into your app manually.
## Migration to v6 ## Migration to v6
> 💡 Please make sure to read the [migration guide](https://echarts.apache.org/en/tutorial.html#ECharts%205%20Upgrade%20Guide) for ECharts 5 as well. > 💡 Please make sure to read the [migration guide](https://echarts.apache.org/en/tutorial.html#ECharts%205%20Upgrade%20Guide) for ECharts 5 as well.

View File

@ -225,7 +225,7 @@ import "echarts";
```html ```html
<script src="https://cdn.jsdelivr.net/npm/vue@3.2.37"></script> <script src="https://cdn.jsdelivr.net/npm/vue@3.2.37"></script>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.3.3"></script> <script src="https://cdn.jsdelivr.net/npm/echarts@5.3.3"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.5.1"></script> <script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.5.2"></script>
``` ```
<!-- vue3Scripts:end --> <!-- vue3Scripts:end -->
@ -245,7 +245,7 @@ app.component('v-chart', VueECharts)
```html ```html
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.5"></script> <script src="https://cdn.jsdelivr.net/npm/vue@2.7.5"></script>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.3.3"></script> <script src="https://cdn.jsdelivr.net/npm/echarts@5.3.3"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.5.1"></script> <script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.5.2"></script>
``` ```
<!-- vue2Scripts:end --> <!-- vue2Scripts:end -->
@ -451,6 +451,10 @@ import { THEME_KEY } from 'vue-echarts'
静态方法请直接通过 [`echarts` 本身](https://echarts.apache.org/zh/api.html#echarts)进行调用。 静态方法请直接通过 [`echarts` 本身](https://echarts.apache.org/zh/api.html#echarts)进行调用。
## CSP: `style-src` 或 `style-src-elem`
如果你正在应用 CSP 来防止内联 `<style>` 注入,则需要使用 `dist/csp` 目录中的文件,并手动引入 `dist/csp/style.css`
## 迁移到 v6 ## 迁移到 v6
> 💡 请确保同时查阅 ECharts 5 的[升级指南](https://echarts.apache.org/zh/tutorial.html#ECharts%205%20%E5%8D%87%E7%BA%A7%E6%8C%87%E5%8D%97)。 > 💡 请确保同时查阅 ECharts 5 的[升级指南](https://echarts.apache.org/zh/tutorial.html#ECharts%205%20%E5%8D%87%E7%BA%A7%E6%8C%87%E5%8D%97)。

View File

@ -1,6 +1,6 @@
{ {
"name": "vue-echarts", "name": "vue-echarts",
"version": "6.5.1", "version": "6.5.2",
"description": "Vue.js component for Apache ECharts.", "description": "Vue.js component for Apache ECharts.",
"author": "GU Yiling <justice360@gmail.com>", "author": "GU Yiling <justice360@gmail.com>",
"scripts": { "scripts": {

View File

@ -4,6 +4,34 @@ import resolve from "@rollup/plugin-node-resolve";
import styles from "rollup-plugin-styles"; import styles from "rollup-plugin-styles";
import { injectVueDemi } from "./scripts/rollup"; import { injectVueDemi } from "./scripts/rollup";
/**
* Convert Rollup option to a style extracted/injected version
* @param {import('rollup').RollupOptions} option
* @param {boolean} extract
* @returns {import('rollup').RollupOptions}
*/
function handleStyle(option, extract) {
// inject styles plugin
const result = { ...option };
const { plugins, output } = result;
result.plugins = (plugins || []).concat(
extract ? styles({ mode: ["extract", "style.css"] }) : styles()
);
// modify output file names
if (extract && output) {
result.output = (Array.isArray(output) ? output : [output]).map(output => {
return {
...output,
file: output.file.replace(/^dist\//, "dist/csp/"),
assetFileNames: "[name][extname]"
};
});
}
return result;
}
/** @type {import('rollup').RollupOptions[]} */ /** @type {import('rollup').RollupOptions[]} */
const options = [ const options = [
{ {
@ -15,8 +43,7 @@ const options = [
outputPath: (path, kind) => outputPath: (path, kind) =>
kind === "declaration" ? "dist/index.d.ts" : path kind === "declaration" ? "dist/index.d.ts" : path
} }
}), })
styles()
], ],
external: ["vue-demi", "echarts/core", "resize-detector"], external: ["vue-demi", "echarts/core", "resize-detector"],
output: { output: {
@ -27,7 +54,7 @@ const options = [
}, },
{ {
input: "src/index.ts", input: "src/index.ts",
plugins: [typescript(), styles()], plugins: [typescript()],
external: ["vue-demi", "echarts/core", "resize-detector"], external: ["vue-demi", "echarts/core", "resize-detector"],
output: [ output: [
{ {
@ -65,7 +92,7 @@ const options = [
}, },
{ {
input: "src/global.ts", input: "src/global.ts",
plugins: [resolve(), typescript(), styles()], plugins: [resolve(), typescript()],
external: ["vue-demi", "echarts", "echarts/core"], external: ["vue-demi", "echarts", "echarts/core"],
output: [ output: [
{ {
@ -105,4 +132,7 @@ const options = [
} }
]; ];
export default options; export default [
...options.map(option => handleStyle(option, false)),
...options.map(option => handleStyle(option, true))
];