Javascript 如何解决Heroku上找不到的模块?
我在nodejs应用程序中使用模块别名。 在本地,一切正常,正在找到文件路径和模块 但是,在Heroku上部署时,没有识别我的别名,因此会发生此错误Javascript 如何解决Heroku上找不到的模块?,javascript,node.js,heroku,relative-path,module-alias,Javascript,Node.js,Heroku,Relative Path,Module Alias,我在nodejs应用程序中使用模块别名。 在本地,一切正常,正在找到文件路径和模块 但是,在Heroku上部署时,没有识别我的别名,因此会发生此错误 错误:找不到模块“app/models/socket.js” app[web.1]:位于Function.Module.\u解析文件名(Module.js:536:15) app[web.1]:位于Function.Module.\u load(Module.js:466:25) app[web.1]:位于Module.require(Modul
错误:找不到模块“app/models/socket.js”
app[web.1]:位于Function.Module.\u解析文件名(Module.js:536:15)
app[web.1]:位于Function.Module.\u load(Module.js:466:25)
app[web.1]:位于Module.require(Module.js:579:17)
app[web.1]:根据需要(internal/module.js:11:18)
app[web.1]:at对象。(/app/bin/www:17:21)
app[web.1]:在模块处编译(Module.js:635:30)
app[web.1]:位于Object.Module.\u extensions..js(Module.js:646:10)
app[web.1]:位于Module.load(Module.js:554:32)
app[web.1]:在tryModuleLoad(module.js:497:12)
app[web.1]:位于Function.Module.\u load(Module.js:489:3)
应用程序[web.1]:npm错误!代码失效循环
应用程序[web.1]:npm错误!错误1
package.json
{
"name": "nameless",
"version": "1.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www",
"commit": "commit-wizard"
},
"engines": {
"node": "8.9.1"
},
"dependencies": {
"apn": "^2.2.0",
"apn-test": "^1.3.1",
"app-module-path": "^2.2.0",
"async": "^0.9.0",
"await-timeout": "^0.3.0",
"aws-subdomain": "^0.1.2",
"base64-img": "^1.0.3",
"bcrypt": "^0.8.7",
"bluebird": "^2.10.2",
"body-parser": "~1.8.1",
"change-case": "^2.1.6",
"circle-to-polygon": "^1.0.0",
"cookie-parser": "~1.3.3",
"cors": "^2.8.4",
"cron": "^1.3.0",
"debug": "^4.1.0",
"diet": "^0.16.0",
"ejs": "^2.5.7",
"express": "~4.9.0",
"express-async-handler": "^1.1.4",
"express-fileupload": "^0.3.0",
"express-fileuploader-s3": "0.0.1",
"express-sslify": "^1.2.0",
"express-subdomain": "^1.0.2",
"fb": "^1.1.1",
"fcm-node": "^1.2.1",
"fcm-push": "^1.1.3",
"geocoder": "^0.2.3",
"geojson-area": "^0.2.1",
"geojson-polygon-center": "0.0.0",
"geojson-rewind": "^0.2.0",
"google-libphonenumber": "^3.0.12",
"google-locations": "^0.1.2",
"googleplaces": "^0.6.0",
"graceful-fs": "^4.1.15",
"gulp": "^3.8.10",
"gulp-concat": "^2.6.0",
"gulp-ng-annotate": "^1.0.0",
"gulp-nodemon": "^1.0.5",
"gulp-replace-task": "^0.2.1",
"gulp-run": "^1.6.6",
"gulp-sloc": "^1.0.4",
"gulp-sourcemaps": "^1.12.1",
"gulp-stylus": "^2.7.0",
"gulp-uglify": "^1.2.0",
"http": "0.0.0",
"http-request": "^0.7.0",
"instagram-api": "^1.0.3",
"instagram-node": "git+https://github.com/andrewoodleyjr/instagram-node.git",
"instagram-node-api": "^1.6.0",
"instagram-node-lib": "^0.1.1",
"jade": "~1.6.0",
"json2csv": "^2.12.0",
"jwt-simple": "^0.2.0",
"knox": "^0.9.2",
"linkedin-scraper2": "https://github.com/andrewoodleyjr/node-linkedin-scraper2/tarball/master",
"mobile-detect": "^1.4.1",
"module-alias": "^2.1.0",
"mongoose": "^5.0.4",
"mongoose-query-random": "^1.0.1",
"mongoose-random": "^0.1.1",
"mongoose-simple-random": "^0.4.1",
"morgan": "~1.3.0",
"multer": "^0.1.6",
"ng-intl-tel-input": "^2.0.0",
"node-cron": "^1.2.1",
"node-foursquare": "^0.3.2",
"node-foursquare-venues": "^1.1.0",
"node-instagram": "^2.0.2",
"node-linkedin": "git+https://github.com/andrewoodleyjr/node-linkedin.git",
"nodemailer": "^1.3.0",
"nodemailer-ses-transport": "^1.5.1",
"nodemon": "^1.14.12",
"opbeat": "^4.17.0",
"polygon-centroid": "^1.0.0",
"prerender-node": "^2.7.4",
"q": "^1.5.1",
"quickthumb": "0.0.11",
"raw-body": "^2.3.2",
"request": "^2.83.0",
"sendy-api": "git://github.com/igord/sendy-api.git",
"serve-favicon": "^2.4.5",
"socket.io": "1.7.2",
"stripe": "^6.3.0",
"swagger": "0.0.1",
"swagger-node-express": "^2.1.3",
"swagger-tools": "^0.9.0",
"tempie": "0.0.2",
"timezone-compute": "^0.2.2",
"timezoner": "^0.1.9",
"twilio": "^3.11.3",
"validator": "^3.27.0",
"vhost": "^3.0.2",
"webpack": "^4.26.0",
"webpack-node-externals": "^1.7.2"
},
"devDependencies": {
"eslint": "^5.9.0",
"eslint-config-airbnb": "^17.1.0",
"eslint-config-airbnb-base": "^13.1.0",
"eslint-import-resolver-alias": "^1.1.1",
"eslint-plugin-import": "^2.14.0",
"eslint-plugin-jsx-a11y": "^6.1.2",
"eslint-plugin-react": "^7.11.1",
"prettyjson": "^1.2.1"
},
"_moduleAliases": {
"@root": "./",
"@db": "db/",
"@models": "models/",
"@util": "util/",
"db": "db/db.js",
"config.js": "config.js"
}
}
bin/www
require('module-alias/register');
const SocketModel = require('@models/socket.js');
const app = require('@root/app.js');
您需要删除“_moduleAlias”下路径末尾的斜杠,如下所示:
注意,如果还没有解决方案,这只是最后的手段 因为OP说它在本地构建和工作 让typescript忽略这些特定的导入。为每个带有别名的导入添加
/@ts ignore
。我知道这是一个丑陋的解决方案,但到目前为止没有任何效果。
请注意,此解决方案仍然需要模块别名
既然你说它可以在本地工作,那么我相信在构建过程中让typescript忽略这些文件并不是什么大不了的事,因为我们关心的只是这些文件被编译成javascript。当然,您需要测试已编译的js文件以确保安全
这个问题与typescript在构建期间没有解析到相应路径的路径映射有关
你可以找到更多的信息。如果要手动转换已编译文件上的路径映射,请检查该答案上的注释
另一个相关问题。谢谢您的回复。不幸的是,它没有解决问题…同样的错误你是否也将模型文件夹推送到heroku?据我所知,heroku除了dependencies之外没有安装任何东西是的,除了dependencies之外的所有东西都被推送到heroku@andrewoodleyjr你的文件夹结构是什么?你找到了解决方案吗?我目前无法将我的应用部署到hero,它也在使用模块-alias@The.Wolfgang.Grimmer不幸的是,我添加了一个临时解决方案。看看它是否适用于你的情况
"_moduleAliases": {
"@root": ".",
"@db": "db",
"@models": "models",
"@util": "util",
"db": "db/db.js",
"config.js": "config.js"
}