gpt4 book ai didi

node.js - 我的 lambda 函数的 Webpack 包有 require 语句(实际上并没有 bundle )

转载 作者:行者123 更新时间:2023-12-03 12:14:00 25 4
gpt4 key购买 nike

所以这是一个非常奇怪的问题。我正在使用 Webpack bundle (并构建)一些用 TypeScript 编写的 lambda 函数,但是 lambda 无法运行,因为 Webpack 输出的“bundle ”实际上并未 bundle 。它们仍然包括本地定义的 TypeScript 模块/帮助程序的“要求”语句。

我确定我错过了一些愚蠢的东西,但我当然会很感激帮助!
tsconfig

{
"compilerOptions": {
"module": "commonjs",
"allowJs": true,
"noEmit": false,
"esModuleInterop": true,
"noImplicitAny": false,
"strictNullChecks": false,
"isolatedModules": false,
"resolveJsonModule": true,
},
"exclude": [],
"include": [
"src/lambda"
],
"ts-node": {
"compilerOptions": {
"module": "commonjs"
}
}
}
webpack.config.ts
import * as webpack from 'webpack';
import * as path from 'path';
import nodeExternals from 'webpack-node-externals';

const handler = (percentage: number, message: string) => {
// eslint-disable-next-line no-console
console.log(`${(percentage * 100).toFixed()}% ${message}`);
};

module.exports = {
entry: {
api: ['./src/lambda/api.ts']
},
node: {
fs: 'empty',
},
resolve: {
extensions: ['.js', '.ts', '.tsx', '.scss'],
},
output: {
libraryTarget: 'commonjs',
path: path.resolve('./build/'),
filename: '[name].js',
},
target: 'node',
externals: [nodeExternals()],
module: {
noParse: /node_modules/,
rules: [
{
test: [/\.ts$/, /\.tsx$/],
exclude: /(node_modules)/,
use: [
{
loader: 'ts-loader',
options: {
configFile: 'tsconfig.lambda.json',
},
},
],
},
],
},
plugins: [new webpack.ProgressPlugin(handler)],
};

api.ts
import { helper } from './api/helper';

export const handler = (event, context, callback) => {
callback(null, {
statusCode: 400,
body: helper(),
});
};

api/helper.ts
export const helper = () => {
return 'Hello World';
};


webpack output
!function(e,r){for(var t in r)e[t]=r[t]}(exports,function(e){var r={};function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(n,o,function(r){return e[r]}.bind(null,o));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="",t(t.s=0)}([function(e,r,t){e.exports=t(1)},function(e,r){"use strict";r.__esModule=!0,r.handler=void 0;var t=require("./api/helper");r.handler=function(e,r,n){n(null,{statusCode:400,body:t.helper()})}}]));

注意 require("./api/helper")接近函数的末尾。为什么拉不进去?? 为什么“bundle ”输出中有要求语句? 辅助函数不应该包含在包中吗?

谢谢!

最佳答案

这里的问题是以下行:

module: {
noParse: /node_modules/, // < --- this guy breaks everything
rules: [
{
test: [/\.ts$/, /\.tsx$/],
exclude: /(node_modules)/,
use: [
{
loader: 'ts-loader',
options: {
configFile: 'tsconfig.lambda.json',
},
},
],
},
],
},


删除 noParse一切都会按预期进行, exclude: /(node_modules)/足够。

更新 : thb 我不知道为什么 noParse在您的应用程序中导致此类 webpack 行为。 HerenoParse的地方处理。

关于node.js - 我的 lambda 函数的 Webpack 包有 require 语句(实际上并没有 bundle ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62316745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com