Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ES Module specs preventing models from bootstrapping #8775

Closed
4 of 15 tasks
nhhockeyplayer opened this issue Dec 11, 2021 · 4 comments
Closed
4 of 15 tasks

ES Module specs preventing models from bootstrapping #8775

nhhockeyplayer opened this issue Dec 11, 2021 · 4 comments
Labels
needs triage This issue has not been looked into

Comments

@nhhockeyplayer
Copy link

Is there an existing issue for this?

  • I have searched the existing issues

Current behavior

I cannot load a simple pojo model due to ES Module restraints

nx serve api-typegoose

> nx run api-typegoose:serve 
chunk (runtime: main) main.js (main) 45.5 KiB (javascript) 937 bytes (runtime) [entry] [rendered]
webpack compiled successfully (19b9838b05893a4a)
Debugger listening on ws://localhost:9229/32d4de92-9271-4ed4-8ec0-f7be78c2c19e
Debugger listening on ws://localhost:9229/32d4de92-9271-4ed4-8ec0-f7be78c2c19e
For help, see: https://nodejs.org/en/docs/inspector
Issues checking in progress...

file:///Users/meanstack02/new/starter/dist/apps/api-typegoose/webpack:/starter/external commonjs "@nestjs/core":1
module.exports = require("@nestjs/core");
^
ReferenceError: require is not defined in ES module scope, you can use import instead
This file is being treated as an ES module because it has a '.js' file extension and '/Users/meanstack02/new/starter/package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.
    at Object.@nestjs/core (file:///Users/meanstack02/new/starter/dist/apps/api-typegoose/webpack:/starter/external commonjs "@nestjs/core":1:1)
    at __webpack_require__ (file:///Users/meanstack02/new/starter/dist/apps/api-typegoose/webpack:/starter/webpack/bootstrap:19:1)
    at file:///Users/meanstack02/new/starter/dist/apps/api-typegoose/main.js:1702:70
    at file:///Users/meanstack02/new/starter/dist/apps/api-typegoose/main.js:1777:3
    at file:///Users/meanstack02/new/starter/dist/apps/api-typegoose/main.js:1782:12
    at ModuleJob.run (node:internal/modules/esm/module_job:185:25)
    at async Promise.all (index 0)
    at ESMLoader.import (node:internal/modules/esm/loader:281:24)
    at loadESM (node:internal/process/esm_loader:88:5)
    at handleMainPromise (node:internal/modules/run_main:65:12)
No issues found.

Minimum reproduction code

git@github.com:nhhockeyplayer/starter.git

Steps to reproduce

using latest releases as of 12/2021
just load a simple pojo called Role with name/description

the RoleModule cannot be imported its stopped by the runtime at bootstrap

Expected behavior

RoleModule should load elegantly

Package

  • I don't know. Or some 3rd-party package
  • @nestjs/common
  • @nestjs/core
  • @nestjs/microservices
  • @nestjs/platform-express
  • @nestjs/platform-fastify
  • @nestjs/platform-socket.io
  • @nestjs/platform-ws
  • @nestjs/testing
  • @nestjs/websockets
  • Other (see below)

Other package

No response

NestJS version

No response

Packages versions

{
"type": "module",
"name": "starter",
"version": "0.0.0",
"license": "MIT",

"scripts": {
"typeorm1": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js",
"typeorm2": "typeorm migration:run",
"typeorm3": "typeorm migration:generate -- -n migrationNameHere",
"nx-force-migrate": "if test -f "migrations.json"; then npm run nx migrate -- --run-migrations=migrations.json; fi;",
"large-build": "node --max_old_space_size=16096 ./node_modules/@angular/cli/bin/ng build --aot --prod",
"large-serve": "node --max_old_space_size=16096 ./node_modules/@angular/cli/bin/ng serve --aot --prod",
"ng": "nx",
"mongo-repair": "mongod -config /usr/local/etc/mongod.conf --dbpath ~/data/db --repair",
"mongo-start": "mongod -config /usr/local/etc/mongod.conf --dbpath ~/data/db",
"mongo-stop": "mongo --eval 'use admin, db.shutdownServer()'",
"prewwinstall": "yarn global add json-server",
"prreinstall": "ts-node ./decorate-angular-cli.ts",
"postinstall": "node decorate-angular-cli.cjs && ngcc --properties es2015 browser module main",
"nx": "nx",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "nx workspace-lint && ng lint",
"e2e": "ng e2e",
"affected:apps": "nx affected:apps",
"affected:libs": "nx affected:libs",
"affected:build": "nx affected:build",
"affected:e2e": "nx affected:e2e",
"affected:test": "nx affected:test",
"affected:lint": "nx affected:lint",
"affected:dep-graph": "nx affected:dep-graph",
"affected": "nx affected",
"format": "nx format:write",
"format:write": "nx format:write",
"format:check": "nx format:check",
"update": "nx migrate latest",
"workspace-generator": "nx workspace-generator",
"dep-graph": "nx dep-graph",
"help": "nx help",
"seed:generate": "ts-node typeorm migration:generate -c seed -n ",
"seed:run": "ts-node typeorm migration:run -c seed",
"seed:revert": "ts-node typeorm migration:revert -c seed"
},
"private": true,
"dependencies": {
"@angular/animations": "^13.1.0",
"@angular/cdk": "^13.1.0",
"@angular/common": "^13.1.0",
"@angular/compiler": "^13.1.0",
"@angular/core": "^13.1.0",
"@angular/flex-layout": "^13.0.0-beta.36",
"@angular/forms": "^13.1.0",
"@angular/material": "^13.1.0",
"@angular/platform-browser": "^13.1.0",
"@angular/platform-browser-dynamic": "^13.1.0",
"@angular/router": "^13.1.0",
"@auth0/angular-jwt": "^5.0.2",
"@capacitor/cli": "^3.3.3",
"@capacitor/core": "^3.3.3",
"@fortawesome/angular-fontawesome": "^0.10.1",
"@fortawesome/fontawesome-free": "^5.15.4",
"@fortawesome/fontawesome-svg-core": "^1.2.36",
"@fortawesome/free-brands-svg-icons": "^5.15.4",
"@fortawesome/free-solid-svg-icons": "^5.15.4",
"@ionic-native/android-permissions": "^5.35.0",
"@ionic-native/app-center-analytics": "^5.35.0",
"@ionic-native/app-center-crashes": "^5.35.0",
"@ionic-native/app-version": "^5.35.0",
"@ionic-native/background-mode": "^5.35.0",
"@ionic-native/call-number": "^5.35.0",
"@ionic-native/core": "^5.35.0",
"@ionic-native/deeplinks": "^5.35.0",
"@ionic-native/document-viewer": "^5.35.0",
"@ionic-native/file": "^5.35.0",
"@ionic-native/file-opener": "^5.35.0",
"@ionic-native/file-path": "^5.35.0",
"@ionic-native/file-transfer": "^5.35.0",
"@ionic-native/fingerprint-aio": "^5.35.0",
"@ionic-native/in-app-browser": "^5.35.0",
"@ionic-native/insomnia": "^5.35.0",
"@ionic-native/local-notifications": "^5.35.0",
"@ionic-native/native-storage": "^5.35.0",
"@ionic-native/network": "^5.35.0",
"@ionic-native/qr-scanner": "^5.35.0",
"@ionic-native/sms-retriever": "^5.35.0",
"@ionic-native/splash-screen": "^5.35.0",
"@ionic-native/status-bar": "^5.35.0",
"@ionic-native/vibration": "^5.35.0",
"@ionic/angular": "^6.0.0",
"@ionic/storage": "^3.0.4",
"@nestifyjs/cookie": "^0.1.0",
"@nestjs/common": "^8.2.3",
"@nestjs/config": "^1.1.5",
"@nestjs/core": "^8.2.3",
"@nestjs/graphql": "^9.1.2",
"@nestjs/jwt": "^8.0.0",
"@nestjs/microservices": "^8.2.3",
"@nestjs/mongoose": "^9.0.1",
"@nestjs/passport": "^8.0.1",
"@nestjs/platform-express": "^8.2.3",
"@nestjs/platform-socket.io": "^8.2.3",
"@nestjs/swagger": "^5.1.5",
"@nestjs/typeorm": "^8.0.2",
"@nestjs/websockets": "^8.2.3",
"@nestjsplus/cookies": "^1.1.1",
"@nestjsx/crud": "^5.0.0-alpha.3",
"@nestjsx/crud-request": "^5.0.0-alpha.3",
"@nestjsx/crud-typeorm": "^5.0.0-alpha.3",
"@ngrx/effects": "^13.0.2",
"@ngrx/entity": "^13.0.2",
"@ngrx/router-store": "^13.0.2",
"@ngrx/schematics": "^13.0.2",
"@ngrx/store": "^13.0.2",
"@ngrx/store-devtools": "^13.0.2",
"@ngx-translate/core": "^14.0.0",
"@ngx-translate/http-loader": "^7.0.0",
"@nrwl/angular": "13.3.1-beta.1",
"@nrwl/schematics": "^8.12.11",
"@nxtend/capacitor": "^12.1.0",
"@nxtend/ionic-angular": "^12.1.0",
"@typegoose/auto-increment": "^1.0.0",
"@typegoose/typegoose": "^9.3.1",
"add": "^2.0.6",
"amazon-cognito-identity-js": "^5.0.6",
"angular-builder-custom-terser-options": "^1.0.1",
"animate.css": "^4.1.1",
"apollo-server-core": "^3.3.0",
"assert": "^2.0.0",
"aws": "0.0.3-2",
"aws-sdk": "^2.688.0",
"bcrypt": "^5.0.1",
"bcrypt-nodejs": "^0.0.3",
"bootstrap": "^5.1.0",
"browser-detect": "^0.2.28",
"chart.js": "^3.5.0",
"class-transformer": "^0.5.1",
"class-validator": "^0.13.2",
"cluster": "^0.7.7",
"config": "^3.3.6",
"cookie-parser": "^1.4.5",
"d3": "^7.0.0",
"d3-array": "^3.0.1",
"d3-brush": "^3.0.0",
"d3-color": "^3.0.1",
"d3-force": "^3.0.0",
"d3-format": "^3.0.1",
"d3-hierarchy": "^3.0.1",
"d3-interpolate": "^3.0.1",
"d3-scale": "^4.0.0",
"d3-selection": "^3.0.0",
"d3-shape": "^3.0.1",
"d3-time-format": "^4.0.0",
"easy-pie-chart": "^2.1.7",
"emoji-flags": "^1.3.0",
"express": "4.17.1",
"font-awesome": "^4.7.0",
"geoip-lite": "^1.4.2",
"global": "^4.4.0",
"graphql": "^16.1.0",
"hammerjs": "^2.0.8",
"hostile": "^1.3.3",
"http-status-codes": "^2.1.4",
"http2": "^3.3.7",
"https": "^1.0.0",
"ionic-plugin-deeplinks": "^1.0.22",
"ionic2-calendar": "^0.6.9",
"ionicons": "^6.0.0",
"jquery": "^3.6.0",
"json2csv": "^5.0.6",
"jsonwebtoken": "^8.5.1",
"jwk-to-pem": "^2.0.5",
"jwt-decode": "^3.1.2",
"koa": "^2.13.1",
"koa-body": "^4.2.0",
"koa-json": "^2.0.2",
"koa-jwt": "^4.0.1",
"koa-passport": "^4.1.4",
"koa-router": "^10.0.0",
"koa-session": "^6.1.0",
"koa-static": "^5.0.0",
"koa2-cors": "^2.0.6",
"lodash": "^4.17.21",
"luxon": "^2.2.0",
"moment": "^2.29.1",
"moment-timezone": "^0.5.33",
"mongoose": "^6.0.14",
"mongoose-autopopulate": "^0.16.0",
"mongoose-findorcreate": "^3.0.0",
"mongoose-lean-virtuals": "^0.9.0",
"nestjs-typegoose": "^7.1.38",
"ng-multiselect-dropdown": "^0.3.7",
"ng2-pdf-viewer": "^7.0.1",
"ngrx-store-freeze": "^0.2.4",
"ngrx-store-logger": "^0.2.4",
"ngx-bootstrap": "^7.0.0",
"ngx-cookie-service": "^13.1.2",
"ngx-doc-viewer": "^2.0.2",
"nodemailer": "^6.6.2",
"passport": "^0.5.0",
"passport-jwt": "^4.0.0",
"passport-local": "^1.0.0",
"pg": "^8.7.1",
"properties-parser": "^0.3.1",
"reflect-metadata": "^0.1.13",
"request": "^2.88.2",
"require": "^2.4.20",
"rimraf": "^3.0.2",
"rxjs": "^7.3.0",
"screenfull": "^6.0.0",
"socket.io": "^4.1.3",
"socket.io-client": "^4.1.3",
"swagger-ui": "^4.1.3",
"swagger-ui-express": "^4.1.6",
"ts-loader": "^9.2.6",
"tslib": "2.3.1",
"typeorm": "^0.2.36",
"zone.js": "0.11.4"
},
"devDependencies": {
"@angular-devkit/build-angular": "^13.1.1",
"@angular-eslint/eslint-plugin": "^13.0.1",
"@angular-eslint/eslint-plugin-template": "^13.0.1",
"@angular-eslint/template-parser": "^13.0.1",
"@angular/cli": "^13.1.1",
"@angular/compiler-cli": "^13.1.0",
"@angular/language-service": "^13.1.0",
"@capacitor/android": "^3.3.3",
"@capacitor/cli": "^3.3.3",
"@capacitor/ios": "^3.3.3",
"@nestjs/schematics": "^8.0.5",
"@nestjs/testing": "^8.2.3",
"@nrwl/cli": "13.3.1-beta.1",
"@nrwl/cypress": "13.3.1-beta.1",
"@nrwl/eslint-plugin-nx": "13.3.1-beta.1",
"@nrwl/express": "13.3.1-beta.1",
"@nrwl/jest": "13.3.1-beta.1",
"@nrwl/linter": "13.3.1-beta.1",
"@nrwl/nest": "13.3.1-beta.1",
"@nrwl/node": "13.3.1-beta.1",
"@nrwl/nx-cloud": "13.0.0",
"@nrwl/tao": "13.3.1-beta.1",
"@nrwl/workspace": "13.3.1-beta.1",
"@nxtend/capacitor": "^12.1.0",
"@types/bcrypt": "^5.0.0",
"@types/bcrypt-nodejs": "^0.0.31",
"@types/bluebird": "^3.5.35",
"@types/bootstrap": "^5.1.0",
"@types/chart.js": "^2.9.32",
"@types/config": "0.0.39",
"@types/d3-array": "^3.0.1",
"@types/d3-axis": "^3.0.1",
"@types/d3-brush": "^3.0.1",
"@types/d3-color": "^3.0.1",
"@types/d3-drag": "^3.0.0",
"@types/d3-force": "^3.0.3",
"@types/d3-format": "^3.0.1",
"@types/d3-hierarchy": "^3.0.2",
"@types/d3-interpolate": "^3.0.1",
"@types/d3-scale": "^4.0.0",
"@types/d3-selection": "^3.0.1",
"@types/d3-selection-multi": "^1.0.10",
"@types/d3-shape": "^3.0.0",
"@types/d3-time": "^3.0.0",
"@types/d3-time-format": "^4.0.0",
"@types/d3-transition": "^3.0.1",
"@types/express": "4.17.0",
"@types/geoip-lite": "^1.4.1",
"@types/googlemaps": "^3.43.3",
"@types/jasmine": "^3.8.2",
"@types/jasminewd2": "^2.0.9",
"@types/jest": "27.0.2",
"@types/jquery": "^3.5.5",
"@types/lodash": "^4.14.172",
"@types/luxon": "^2.0.0",
"@types/moment-timezone": "^0.5.30",
"@types/mongodb": "^4.0.7",
"@types/mongoose": "^5.11.97",
"@types/node": "12.11.1",
"@types/passport-local": "^1.0.33",
"@types/socket.io": "^3.0.2",
"@types/socket.io-client": "^3.0.0",
"@typescript-eslint/eslint-plugin": "5.3.1",
"@typescript-eslint/parser": "5.3.1",
"cypress": "^8.2.0",
"dotenv": "10.0.0",
"eslint": "8.2.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-cypress": "^2.10.3",
"i": "^0.3.7",
"jest": "^27.4.4",
"jest-preset-angular": "11.0.0-rc.3",
"npm": "^8.3.0",
"prettier": "^2.3.1",
"ts-jest": "27.0.5",
"ts-node": "^10.2.0",
"typescript": "4.4.4",
"webpack-sources": "^3.2.2"
},
"resolutions": {
"is-promise": "2.1.0"
}
}

Node.js version

No response

In which operating systems have you tested?

  • macOS
  • Windows
  • Linux

Other

I tried editing the tsconfig's for my api to es2020 without luck

its in a nrwl/nx monorepo

any help is appreciated

I got my angular client side (well everything is housed in a monorepo apps and servers) to build fine using

"type": "module"

in the package.json

@nhhockeyplayer nhhockeyplayer added the needs triage This issue has not been looked into label Dec 11, 2021
@nhhockeyplayer

This comment was marked as spam.

@nhhockeyplayer

This comment was marked as spam.

@jmcdo29
Copy link
Member

jmcdo29 commented Dec 11, 2021

If you'd take a moment to look at our pull requests, you'd see there is a PR to support ESM builds. I've been trying to find what the benefit of ESM on the Node + Typescript side of things is, and it's seems that it's really just because ESM is the new standard (which I agree we should try to follow) and because using CJS with ESM is a pain. We'll try to get to this as soon as we can, but I will make no guarantee on how fast that will be.

I tried navigating to your repo and got a GitHub 404, so not sure what's going on there.

@jmcdo29 jmcdo29 closed this as completed Dec 11, 2021
@micalevisk
Copy link
Member

I'm not familiar with Webpack but the problem here is that @nestjs/core module is being interpreted as an ESM module for whatever reason.

@nestjs nestjs locked and limited conversation to collaborators Dec 13, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
needs triage This issue has not been looked into
Projects
None yet
Development

No branches or pull requests

3 participants