ember-fastboot / simple-dom

207 stars 30 forks source link

Unable to import simple-dom with typescript and webpack #74

Open reconbot opened 5 years ago

reconbot commented 5 years ago

I'm trying to get simpledom working in codebase with two environments. One with ts-node and another with webpack and ts-loader with "esModuleInterop": true,

With simple-dom@1.3.0 I could do

import { Document, HTMLSerializer } from 'simple-dom'

And it worked in all environments but has a bug where I had to include dom in my tsconfig libs configuration to get typescript to compile.

For the upgrade to 1.4.0, the previous code works with ts-node but webpack changes the export from simple-dom to be a single export named simple-dom

This works but only in webpack with ts-loader@5.3.3 and not with ts-node

const {
  simpleDom: { Document, HTMLSerializer },
} = require('simple-dom')

The following work with nothing... errors are from webpack.

import simpleDom from 'simple-dom'
console.log({ simpleDom })
// { simpleDom: undefined }
import { simpleDom } from 'simple-dom'
console.log({ simpleDom })
// { simpleDom: undefined }
import simpledom from 'simple-dom/dist/modules/es2017'
console.log({ simpledom })
// { simpledom: undefined }
import { Document, HTMLSerializer } from 'simple-dom/dist/modules/es2017'
// [2019-02-07T17:44:36.740Z] ERROR (gradius): a.HTMLSerializer is not a constructor
//    TypeError: a.HTMLSerializer is not a constructor
//        at Object.<anonymous> (/Users/wizard/src/gradius/dist/webpack-test/index.js:1493:696)

I'm not sure where to go from here. Any ideas?

Thanks!

reconbot commented 5 years ago

We got a workaround by requiring the dependent packages specifically.

import Document from '@simple-dom/document'
import HTMLSerializer from '@simple-dom/serializer'
import voidMap from '@simple-dom/void-map'
imakeinterfaces commented 5 years ago

Thanks, i had the same issue.

stephankaag commented 5 years ago

I run into the same issue. Is any better solution available in the meantime?