nodecg / express-transform-bare-module-specifiers

Express middleware to transform bare module specifiers on-the-fly.
4 stars 2 forks source link

TypeError: Cannot use 'in' operator to search for 'nocompile' in undefined #2

Closed dman777 closed 5 years ago

dman777 commented 5 years ago

Thanks for making this npm module.... it is desperately needed.

I am having issues with using it in browser sync. Am I doing anything wrong here?

Short version/snippet of bs-config:

    "server": {
      baseDir: ['./app'],
      middleware: [
        proxyMiddleware,
        transformMiddleware({
          rootDir: path.resolve(__dirname, '/'),
          modulesUrl: '/node_modules'
        }),
        historyApiFallback()
      ],
    },

I am getting:

/home/two/gitlab/front-end-dolphin-p3/node_modules/express-transform-bare-module-specifiers/dist/compile-middleware.js:33
            if ('nocompile' in request.query) {
                            ^

TypeError: Cannot use 'in' operator to search for 'nocompile' in undefined
    at Object.shouldTransform (/home/two/gitlab/front-end-dolphin-p3/node_modules/express-transform-bare-module-specifiers/dist/compile-middleware.js:33:29)
    at shouldTransform (/home/two/gitlab/front-end-dolphin-p3/node_modules/express-transform-bare-module-specifiers/dist/transform-middleware.js:17:55)
    at ServerResponse.res.write (/home/two/gitlab/front-end-dolphin-p3/node_modules/express-transform-bare-module-specifiers/dist/transform-middleware.js:27:17)
    at ReadStream.ondata (_stream_readable.js:663:20)
    at ReadStream.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at ReadStream.Readable.push (_stream_readable.js:219:10)
    at fs.read (internal/fs/streams.js:158:12)
    at FSReqWrap.wrapper [as oncomplete] (fs.js:467:17)

Using 1.0.2 version.

dman777 commented 5 years ago

So this worked... sort of

function babelCompile({ rootDir = process.cwd(), modulesUrl = '/node_modules' } = {}) {
    return transform_middleware_1.transformResponse({
        shouldTransform(request, response) {
            if (!request.query) {
              return;
            }

I say sort of, because now I am able to connect and request pages. But it's not able to transform the modules. I get the usual

Uncaught TypeError: Failed to resolve module specifier "@polymer/polymer/polymer-element.js". Relative references must start with either "/", "./", or "../".

I have my web app root as / and my polymer elements in ./app.

The config I am using is:

    "server": {
      baseDir: ['./'],
      middleware: [
        proxyMiddleware,
        transformMiddleware({
          rootDir: path.resolve(__dirname, './'),
          modulesUrl: './node_modules'
        }),
        historyApiFallback()
      ],

Would this failure be from my config or from the query not existing in the source code?

dman777 commented 5 years ago

Ok, had some success with:

    return transform_middleware_1.transformResponse({
        shouldTransform(request, response) {
            if (request.query && 'nocompile' in request.query) {
                return false;
            }
            if (request.query && !compileMimeTypes.includes(getContentType(response))) {
                return false;
            }
            return true;
        },

but still get the usual can not resolve path error in the browser and this new error from the module:

Error TypeError: response.get is not a function
    at getContentType (/home/two/gitlab/front-end-dolphin-p3/node_modules/express-transform-bare-module-specifiers/dist/compile-middleware.js:20:40)
    at Object.transform (/home/two/gitlab/front-end-dolphin-p3/node_modules/express-transform-bare-module-specifiers/dist/compile-middleware.js:47:33)
    at ServerResponse.res.end (/home/two/gitlab/front-end-dolphin-p3/node_modules/express-transform-bare-module-specifiers/dist/transform-middleware.js:52:43)
    at ReadStream.onend (_stream_readable.js:625:10)
    at Object.onceWrapper (events.js:273:13)
    at ReadStream.emit (events.js:187:15)
    at endReadableNT (_stream_readable.js:1081:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)

Not sure if it matters but I am using HTTPs.

dman777 commented 5 years ago

Ah.... maybe I am not. I am using browser-sync stand alone. I assumed it uses some kind of express integration since I was using history fall back api with no issues.

Instead, I could just proxy the requests from browser-sync to a express server.

To use a express server just for serving the static files, would it be the below?

app.use('*', transformMiddleware());
app.use('/node_modules', express.static(path.join(__dirname, 'node_modules')))
dman777 commented 5 years ago

Closing this issue since I was using browser sync and this module as a middle ware, instead of using express