自定义节点包不提供名为
Custom node package does not provide an export named
我觉得我已经尝试了所有方法,但似乎没有任何效果。
我创建并发布了以下模块:
Index.ts :
import ContentIOService from "./IOServices/ContentIOService";
export = {
ContentIOService: ContentIOService,
}
其中 ContentIOService
是以下文件:
import {SuperIO} from "../Framework/SuperIO";
export interface ICMSContentData {
id: number;
url: string;
htmlTag: string;
importJSComponent: string;
componentData: string
}
export interface CMSData {
id: number;
url: string;
htmlTag: string;
importJSComponent: string;
componentData: Object
}
export default class ContentIOService extends SuperIO {
private static instance: ContentIOService;
public static getInstance(): ContentIOService {
if (!ContentIOService.instance) {
ContentIOService.instance = new ContentIOService();
}
return ContentIOService.instance;
}
public async GetContent(url: string) {
const response = await super.get<ICMSContentData[]>(url, {});
try {
if (response?.parsedBody) {
return this.ProcessResponse(response.parsedBody);
} else {
this.handleHTTPError(new Error("Error"))
}
} catch (e) {
this.handleHTTPError(e);
}
}
private ProcessResponse(ContentData: ICMSContentData[]): CMSData[] {
let CMSData: CMSData[] = [];
for (let i = 0; i < ContentData.length; i++) {
CMSData.push({
id: ContentData[i].id,
url: ContentData[i].url,
htmlTag: ContentData[i].htmlTag,
importJSComponent: ContentData[i].importJSComponent,
componentData: this.parseComponentData(ContentData[i].componentData)
})
}
return CMSData;
}
private handleHTTPError(e: Error) {
console.log(e)
}
private parseComponentData(parseAbleString: string): Object {
return JSON.parse(parseAbleString);
}
}
然后我将其构建在一起并将其捆绑到 /lib
文件夹中:
这是用以下 tsconfig
构建的
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"declaration": true,
"outDir": "./lib",
"esModuleInterop": true,
"strict": true
},
"include": ["src"],
"exclude": ["node_modules", "**/__tests__/*"]
}
为了争论,如果有必要,我也会 post 我的 Package.json
:
{
"name": "sdk-io-package",
"version": "1.1.6",
"description": "",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"scripts": {
"test": "jest --config jestconfig.json",
"build": "tsc",
"format": "prettier --write \"src/**/*.ts\" \"src/**/*.js\"",
"lint": "tslint -p tsconfig.json"
},
"keywords": [],
"author": "Marc Rasmussen",
"license": "MIT",
"devDependencies": {
"@types/jest": "25.2.2",
"chai": "^4.2.0",
"es6-promise": "^4.2.8",
"isomorphic-fetch": "^2.2.1",
"jest": "25.2.2",
"prettier": "^2.1.1",
"ts-jest": "^26.3.0",
"tslint": "^6.1.3",
"tslint-config-prettier": "^1.18.0",
"typescript": "^3.9.7"
},
"files": [
"lib/**/*"
]
}
我把这个模块发布到我的私有proget服务器上,然后导入到我的其他项目中:
index.js 文件如下所示:
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var ContentIOService_1 = __importDefault(require("./IOServices/ContentIOService"));
module.exports = {
ContentIOService: ContentIOService_1.default,
};
然后在我的打字稿中导入它:
import {LitElement, html, customElement, property} from 'lit-element';
import {ContentIOService} from 'sdk-io-package';
@customElement('my-test-element')
export class MyTestElement extends LitElement {
@property()
text: string = "Hello world";
render() {
this.test();
return html`
${this.text}
`;
}
async test (){
const instance = ContentIOService.getInstance();
const data = instance.GetContent("https://httpbin.org/get")
console.log(data);
}
}
declare global {
interface HTMLElementTagNameMap {
'my-test-element': MyTestElement;
}
}
然后我 运行 我的应用程序(它构建时没有任何打字稿错误)并提供服务,转到浏览器,我收到以下错误:
Uncaught (in promise) SyntaxError: The requested module '../../node_modules/sdk-io-package/lib/index.js' does not provide an export named 'ContentIOService'
我根本不知道自己做错了什么。
小更新
当我在浏览器中查看 node_modules 文件夹时,实际上我没有看到 lib 中的文件夹,因此也没有看到模块?:
export = {
ContentIOService: ContentIOService,
}
这不会导出名为 ContentIOService
的值。相反,它是具有名为 ContentIOService
的 属性 的对象的默认导出。这两种情况不是一回事。
命名导出看起来更像这样:
import _ContentIOService from "./IOServices/ContentIOService";
export const ContentIOService = _ContentIOService;
您可以使用 re-export:
清理
export { default as ContentIOService } from "./IOServices/ContentIOService";
我觉得我已经尝试了所有方法,但似乎没有任何效果。
我创建并发布了以下模块:
Index.ts :
import ContentIOService from "./IOServices/ContentIOService";
export = {
ContentIOService: ContentIOService,
}
其中 ContentIOService
是以下文件:
import {SuperIO} from "../Framework/SuperIO";
export interface ICMSContentData {
id: number;
url: string;
htmlTag: string;
importJSComponent: string;
componentData: string
}
export interface CMSData {
id: number;
url: string;
htmlTag: string;
importJSComponent: string;
componentData: Object
}
export default class ContentIOService extends SuperIO {
private static instance: ContentIOService;
public static getInstance(): ContentIOService {
if (!ContentIOService.instance) {
ContentIOService.instance = new ContentIOService();
}
return ContentIOService.instance;
}
public async GetContent(url: string) {
const response = await super.get<ICMSContentData[]>(url, {});
try {
if (response?.parsedBody) {
return this.ProcessResponse(response.parsedBody);
} else {
this.handleHTTPError(new Error("Error"))
}
} catch (e) {
this.handleHTTPError(e);
}
}
private ProcessResponse(ContentData: ICMSContentData[]): CMSData[] {
let CMSData: CMSData[] = [];
for (let i = 0; i < ContentData.length; i++) {
CMSData.push({
id: ContentData[i].id,
url: ContentData[i].url,
htmlTag: ContentData[i].htmlTag,
importJSComponent: ContentData[i].importJSComponent,
componentData: this.parseComponentData(ContentData[i].componentData)
})
}
return CMSData;
}
private handleHTTPError(e: Error) {
console.log(e)
}
private parseComponentData(parseAbleString: string): Object {
return JSON.parse(parseAbleString);
}
}
然后我将其构建在一起并将其捆绑到 /lib
文件夹中:
这是用以下 tsconfig
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"declaration": true,
"outDir": "./lib",
"esModuleInterop": true,
"strict": true
},
"include": ["src"],
"exclude": ["node_modules", "**/__tests__/*"]
}
为了争论,如果有必要,我也会 post 我的 Package.json
:
{
"name": "sdk-io-package",
"version": "1.1.6",
"description": "",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"scripts": {
"test": "jest --config jestconfig.json",
"build": "tsc",
"format": "prettier --write \"src/**/*.ts\" \"src/**/*.js\"",
"lint": "tslint -p tsconfig.json"
},
"keywords": [],
"author": "Marc Rasmussen",
"license": "MIT",
"devDependencies": {
"@types/jest": "25.2.2",
"chai": "^4.2.0",
"es6-promise": "^4.2.8",
"isomorphic-fetch": "^2.2.1",
"jest": "25.2.2",
"prettier": "^2.1.1",
"ts-jest": "^26.3.0",
"tslint": "^6.1.3",
"tslint-config-prettier": "^1.18.0",
"typescript": "^3.9.7"
},
"files": [
"lib/**/*"
]
}
我把这个模块发布到我的私有proget服务器上,然后导入到我的其他项目中:
index.js 文件如下所示:
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var ContentIOService_1 = __importDefault(require("./IOServices/ContentIOService"));
module.exports = {
ContentIOService: ContentIOService_1.default,
};
然后在我的打字稿中导入它:
import {LitElement, html, customElement, property} from 'lit-element';
import {ContentIOService} from 'sdk-io-package';
@customElement('my-test-element')
export class MyTestElement extends LitElement {
@property()
text: string = "Hello world";
render() {
this.test();
return html`
${this.text}
`;
}
async test (){
const instance = ContentIOService.getInstance();
const data = instance.GetContent("https://httpbin.org/get")
console.log(data);
}
}
declare global {
interface HTMLElementTagNameMap {
'my-test-element': MyTestElement;
}
}
然后我 运行 我的应用程序(它构建时没有任何打字稿错误)并提供服务,转到浏览器,我收到以下错误:
Uncaught (in promise) SyntaxError: The requested module '../../node_modules/sdk-io-package/lib/index.js' does not provide an export named 'ContentIOService'
我根本不知道自己做错了什么。
小更新
当我在浏览器中查看 node_modules 文件夹时,实际上我没有看到 lib 中的文件夹,因此也没有看到模块?:
export = {
ContentIOService: ContentIOService,
}
这不会导出名为 ContentIOService
的值。相反,它是具有名为 ContentIOService
的 属性 的对象的默认导出。这两种情况不是一回事。
命名导出看起来更像这样:
import _ContentIOService from "./IOServices/ContentIOService";
export const ContentIOService = _ContentIOService;
您可以使用 re-export:
清理export { default as ContentIOService } from "./IOServices/ContentIOService";