جاوااسکریپت - انگولار ۵ تایپاسکریپت - شامل کد ES2015
من در حال کار روی برنامه Angular 5 هستم که باید کتابخانه dmn-js را در آن وارد کنم که تایپینگ برای آن در دسترس نیست. من مراحل توضیح داده شده در ویکی angular-cli را در مورد نحوه وارد کردن کتابخانههای شخص ثالث دنبال کردم، به ویژه مرحلهای که تحت عنوان "اگر کتابخانه تایپینگ در @types/ ندارد، هنوز میتوانید با اضافه کردن تایپینگ به صورت دستی از آن استفاده کنید:" ذکر شده بود.
این حالا شکلی است که کد من بعد از - دارد
src/typings.d.ts
/* SystemJS module definition */
declare var module: NodeModule;
declare module 'dmn-js';
interface NodeModule {
id: string;
}
src/app/app.component.ts
import { Component, OnInit } from '@angular/core';
import {HttpClient} from '@angular/common/http';
import * as DmnJS from 'dmn-js';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
title = 'DMN';
constructor(private http: HttpClient){
}
ngOnInit(): void {
var viewer = new DmnJS ({ container: 'body' });
var dmnXML; //DMN 1.1 xml
viewer.importXML(dmnXML, this.handleError);
}
handleError(err: any) {
if (err) {
console.warn('Ups, error: ', err);
}else {
console.log('rendered');
}
}
load(): void {
const url = '/assets/dish-decision.dmn';
this.http.get(url, {
headers: {observe: 'response'}, responseType: 'text'
}).subscribe(
(x: any) => {
console.log('Fetched XML, now importing: ', x);
//this.modeler.importXML(x, this.handleError);
},
this.handleError
);
}
save(): void {
//this.modeler.saveXML((err: any, xml: any) => console.log('Result of saving XML: ', err, xml));
}
}
حالا وقتی کد را کامپایل میکنم، خطای زیر را دریافت میکنم. مطمئن نیستم برای رفع این مسئله چه کاری باید انجام دهم چون تمام مراحل را دنبال کردهام.
ERROR in ./node_modules/dmn-js-drd/lib/Viewer.js
Module parse failed: Unexpected token (175:4)
You may need an appropriate loader to handle this file type.
| additionalModules,
| canvas,
| ...additionalOptions
| } = options;
|
ERROR in ./node_modules/dmn-js-shared/lib/base/Manager.js
Module parse failed: Unexpected token (292:16)
You may need an appropriate loader to handle this file type.
| }
|
| _viewsChanged = () => {
| this._emit('views.changed', {
| views: this._views,
ERROR in ./node_modules/dmn-js-decision-table/lib/Viewer.js
Module parse failed: Unexpected token (75:6)
You may need an appropriate loader to handle this file type.
| modules,
| additionalModules,
| ...config
| } = options;
|
ERROR in ./node_modules/dmn-js-literal-expression/lib/Viewer.js
Module parse failed: Unexpected token (77:6)
You may need an appropriate loader to handle this file type.
| modules,
| additionalModules,
| ...config
| } = options;
|
webpack: Failed to compile.
پاسخ شماره ۱
ویکی Angular-cli توضیح میدهد که چگونه اضافه کنید، همانطور که قبلاً دنبال کردهاید، حالا میتوانید به کتابخانه شخص ثالث دسترسی پیدا کنید، اما در اینجا dmn-js نیاز به افزونههایی دارد که میتوانند از (اپراتورهای گسترده و دیگر تبدیلهای داخلی و غیره) پشتیبانی کنند. و dmn-js از babel استفاده میکند [اگر دقت کنید، مشاهده خواهید کرد که در هر پوشه از dmn* فایل .babelrc وجود دارد].
برای حمایت از dmn-js ما نیاز داریم که webpack را پیکربندی کنیم. پس از صرف مقدار قابل توجهی زمان، نتیجه به این صورت است:
در فایل your.Component.ts شما
constructor(private http: HttpClient ){
this.http.get('../assets/val.xml',{responseType: 'text'}).subscribe(x=>{
var xml= x; // my DMN 1.1 xml
//var myContainer = document.getElementsByClassName('canvas');
var viewer = new Viewer({
container: '.canvas'
});
viewer.importXML(xml, function(err) {
console.log('*********************');
if (err) {
console.log('error rendering', err);
} else {
viewer
.getActiveViewer()
.get('canvas')
.zoom('fit-viewport');
}
});
});
در your.Component.html
<body >
<div class="canvas" style="width:100vh;height:100vh ;padding-left:100px"></div>
</body>
در فایل Webpack.config.js (از ng eject استفاده کنید، اگر وجود ندارد) یک قانون در module -> rules اضافه کنید
{ test: /\.js$/,
exclude: /node_modules\/(?!(dmn-js|dmn-js-drd|dmn-js-shared|dmn-js-decision-table|table-js|dmn-js-literal-expression|diagram-js)\/).*/,
loader: 'babel-loader',query: {presets: ["react","es2015","stage-0"]}
}
در index.html لینکهای استایل شیت اضافه کنید
<link rel="stylesheet" href="https://unpkg.com/[email /dist/assets/dmn-js-drd.css">
<link rel="stylesheet" href="https://unpkg.com/[email /dist/assets/dmn-js-decision-table.css">
<link rel="stylesheet" href="https://unpkg.com/[email /dist/assets/dmn-js-literal-expression.css">
<link rel="stylesheet" href="https://unpkg.com/[email /dist/assets/dmn-font/css/dmn.css">
Typings.d.ts -> شما قبلاً اضافه کردهاید !!
نصب وابستگیها:
npm i --save-dev babel-plugin-inferno babel-plugin-transform-object-rest-spread babel-plugin-transform-class-properties babel-plugin-transform-object-assign
امیدوارم این کمک کند!!!
Ref1: https://github.com/bpmn-io/dmn-js-examples/tree/master/bundling
Ref2: خطا: تبديل ویژگیهای کلاس گم شده است
Ref3: https://github.com/webpack/webpack/issues/2902
