Jor*_*rdi 10 azure node.js npm typescript azure-devops
我正在尝试将打字稿应用程序发布到在 Linux 上运行的 Azure 应用服务。我正在使用 Azure DevOps 执行此操作。我已经设置了成功的构建和发布管道,但是当我访问应用程序服务的 URL 时,我看到一条消息“:c 应用程序错误”,它引用了诊断日志。这些日志给我以下错误:
错误:找不到模块“../lib/tsc.js”
完整的错误日志
myApp@1.0.0 prod /home/site/wwwroot
> npm run build && npm run start
> myApp@1.0.0 build /home/site/wwwroot
> tsc
internal/modules/cjs/loader.js:583
throw err;
^
Error: Cannot find module '../lib/tsc.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
at Function.Module._load (internal/modules/cjs/loader.js:507:25)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object. (/home/site/wwwroot/node_modules/.bin/tsc:2:1)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! myApp@1.0.0 build: `tsc`
npm ERR! Exit status 1
Run Code Online (Sandbox Code Playgroud)
我的 Azure Devops 环境由构建管道和发布管道组成,前者执行 npm 安装并将其发布到工件,后者执行部署然后运行启动命令。这些步骤成功并运行了启动命令,但它会产生上述错误。
我尝试在创建工件之前构建应用程序,但这在构建步骤中出现错误,无法找到正在导入的文件。我可以在本地运行npm run prod命令,没有任何问题。
有谁知道这可能是什么原因造成的?
包.json
{
"name": "MyApp",
"version": "1.0.0",
"description": "",
"main": "./dist/index.js",
"scripts": {
"build": "tsc",
"dev": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec ts-node src/index.ts",
"start": "nodemon ./dist/index.js",
"prod": "npm run build && npm run start",
"test": "mocha --ui tdd -r ts-node/register tests/**/*.test.ts"
},
"author": "",
"license": "ISC",
"dependencies": {
"@google/chatbase": "^1.1.2",
"@types/express": "^4.17.0",
"actions-on-google": "^2.7.1",
"body-parser": "^1.19.0",
"dotenv": "^8.0.0",
"express": "^4.17.1",
"morgan": "^1.9.1",
"nodemon": "^1.19.1",
"ssml-builder": "^0.4.3",
"ts-sinon": "^1.0.17",
"ts-node": "^8.3.0",
"tsc-watch": "^2.2.1",
"typescript": "^3.5.3",
"uuid": "^3.3.2"
},
"devDependencies": {
"@types/chai": "^4.1.7",
"@types/mocha": "^5.2.7",
"chai": "^4.2.0",
"mocha": "^6.1.4"
}
}
Run Code Online (Sandbox Code Playgroud)
Tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"pretty": true,
"sourceMap": true,
"target": "es6",
"outDir": "./dist",
"baseUrl": "./src",
"resolveJsonModule": true,
"esModuleInterop": true,
},
"include": [
"src/**/*.ts",
"src/data/*.json",
"src/data/sounds/*.mp3"
],
"exclude": [
"node_modules"
]
}
Run Code Online (Sandbox Code Playgroud)
小智 17
由于复制而面临同样的问题node_modules。
解决方案
以下更改package.json解决了该问题:
"scripts": {
"build": "./node_modules/typescript/bin/tsc", // not just "tsc"
...
}
Run Code Online (Sandbox Code Playgroud)
描述
原始 tsc 脚本位于node_modules/typescript/bin/tsc,但该文件的符号链接位于node_modules/.bin/tsc。
虽然node_modules/.bin/tsc是符号链接,但导入../lib/tsc.js工作正常,但复制后这只是一个具有相同内容的文件,因此复制会破坏相对路径的导入。
因此指定原始 tsc 脚本的路径可以解决这个问题。
您正在使用tsc命令来编译您的 typescript 文件,这样,它不会将必要的包代码包含到结果文件(js)中,因此您需要将node_modules文件夹(包括包文件)上传/发布到/home/ site/wwwroot也可以(可以通过发布将node_modules与结果文件一起发布)。
您可以通过 webpack 编译 typescript 文件,它可以将包的代码包含到结果文件中。https://webpack.js.org/guides/typescript/
| 归档时间: |
|
| 查看次数: |
13061 次 |
| 最近记录: |