当node_module库导入索引文件时,webpack为什么不在构建中包含这些库?
webpack对我来说仍然是一种黑色的艺术,我还没有完全掌握,所以下面是我试图实现的一个解释。
我正在构建一个测试应用程序,以在AWS Lambda节点服务器上作为无服务器代码运行。目标是通过在服务器上有一个或多个块并且没有node_modules文件夹,使部署包尽可能小。
我正在用TypescriptV3编写文章,并使用WebPackV4为服务器创建一个捆绑包。
下面是我的目录结构:
这里是我的package.json的节选。
"dependencies": {
"moment": "^2.22.2"
},
"devDependencies": {
"@types/aws-lambda": "^8.10.15",
"@types/node": "^10.12.2",
"awesome-typescript-loader": "^5.2.1",
"aws-lambda": "^0.1.2",
"source-map-loader": "^0.2.4",
"ts-node": "^7.0.1",
"tslint": "^5.11.0",
"tslint-loader": "^3.5.4",
"typescript": "^3.1.6",
"webpack": "^4.25.1",
"webpack-bundle-analyzer": "^3.0.3",
"webpack-cli": "^3.1.2",
"webpack-node-externals": "^1.7.2"
}
我正在尝试捆绑的索引.ts:
import { Handler } from "aws-lambda";
import moment from "moment";
const handler: Handler = async ( event: any ) => {
const stamp = moment().format( "x" );
console.log( `process: ${ process.env.NAME } called at ${ stamp }` );
console.log( event );
return {
body: "process completed",
statusCode: 200
};
};
export { handler };
我的tsconfig.json:
{
"compilerOptions": {
"outDir": "./dist",
"sourceMap": true,
"noImplicitAny": true,
"module": "commonjs",
"target": "es5",
"allowJs": true,
"pretty": false,
"removeComments": true,
"esModuleInterop": true,
"moduleResolution": "node",
"types": [
"node"
],
"lib": [
"es5",
"es6",
"dom"
]
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
]
}
最后是我的webpack.config.js:
const path = require( "path" );
const UglifyJSPlugin = require( "uglifyjs-webpack-plugin" );
const nodeExternals = require( "webpack-node-externals" );
const ROOT = path.resolve( __dirname, "src" );
const DESTINATION = path.resolve( __dirname, "dist" );
module.exports = {
context: ROOT,
mode: "production",
entry: {
index: "./index.ts"
},
target: "node",
externals: [ nodeExternals() ],
optimization: {
minimizer: [
new UglifyJSPlugin( {
uglifyOptions: {
compress: true,
mangle: false,
toplevel: false,
keep_classnames: true,
keep_fnames: true
}
} )
],
splitChunks: {
cacheGroups: {
node_vendors: {
test: /[\\/]node_modules[\\/]/,
chunks: "all",
priority: 1
}
}
}
},
output: {
filename: "[name].js",
libraryTarget: "commonjs2",
path: DESTINATION
},
resolve: {
extensions: [ ".ts", ".js" ],
modules: [ ROOT, "node_modules" ]
},
module: {
rules: [
{
enforce: "pre",
test: /\.js$/,
use: "source-map-loader"
},
{
enforce: "pre",
test: /\.ts$/,
exclude: /node_modules/,
use: "tslint-loader"
},
{
test: /\.ts$/,
exclude: [ /node_modules/ ],
use: "awesome-typescript-loader"
}
]
},
devtool: "cheap-module-source-map",
devServer: {}
};
运行webpack时,会得到以下控制台输出:
Version: webpack 4.25.1
Time: 4856ms
Built at: 2018-11-08 15:41:09
Asset Size Chunks Chunk Names
index.js 3.83 KiB 0 [emitted] index
Entrypoint index = index.js
[0] ./index.ts 3.11 KiB {0} [built]
[1] external "moment" 42 bytes {0} [built]
当我将其部署到AWS Lambda I并调用该函数时,我得到以下错误:
{
"errorMessage": "Cannot find module 'moment'",
"errorType": "Error",
"stackTrace": [
"Function.Module._load (module.js:474:25)",
"Module.require (module.js:596:17)",
"require (internal/module.js:11:18)",
"Object.<anonymous> (/var/task/index.js:1:3963)",
"__webpack_require__ (/var/task/index.js:1:323)",
"Object.<anonymous> (/var/task/index.js:1:3595)",
"__webpack_require__ (/var/task/index.js:1:323)",
"module.exports.__awaiter.__awaiter.P (/var/task/index.js:1:1650)",
"Object.<anonymous> (/var/task/index.js:1:1695)"
]
}
由于nodeExternals,它将每个依赖项声明为外部的(即:执行时必须存在node_modules)。
问题内容: Python中是否有一种简单的方法可以生成一个范围内的随机数,但不包括该范围内的某些数字子集? 例如,我知道您可以使用以下方法生成0到9之间的随机数: 如果我有一个清单,例如不想退回该怎么办? 问题答案: 尝试这个:
实体或字段可以映射到/字段,例如,可以映射到: 然而,生成的实现类不包括类的任何导入语句,尽管它存在于抽象类中,因此代码不编译: 为什么会这样?我做错了吗?怎么解决这个? Edit2:在MapStruct的Github上发布了这个问题:https://Github.com/mapstruct/mapstruct/issues/844
我正在尝试将我的分级版本从2.3更新到2.12。当我运行“eclipse”任务来生成eclipse文件时,在使用新版本(2.12)时遇到了一个问题。 在.classpath文件中生成的classpathentry节点不再包含exported=“true”属性,这是在Eclipse中创建工作运行目标所必需的。 使用2.3版 使用版本2.12(缺少exported=“true”) 我在Gradle文档
我正试图在Mac OS X El Capitan上使用创建一个虚拟环境。我已经用安装了Python 2.7.11,默认情况下包括、和。 然而,当我尝试安装以下说明在留档或从任何其他资源,我得到几个问题: 完成其工作后,可执行文件未放置在中,因此我需要手动它(这可能表明此步骤的安装有问题) 运行后,它会创建新的环境,从-安装中捕获Python 2.7.11,但是:文件夹中没有。这意味着,如果我尝试,
问题内容: 我已经在我的应用程序上编写了广泛的JavaDoc文档,并在和文件中添加了许多有用的信息(包括前者到中的插图的链接)。Maven的Javadoc插件很好地使用了标准的javadoc工具来生成经典的JavaDoc框架集,但是现在我需要使用整个文档来生成PDF。 AurigaDoclet生成非常漂亮的PDF,我也能够使DocFlex正常工作。但是,它们都忽略了我和文件(在Maven内部和外部
本文向大家介绍批处理生成几乎任何字符,包括Tab,包括了批处理生成几乎任何字符,包括Tab的使用技巧和注意事项,需要的朋友参考一下 One of my early posts on DosTips was a :chr routine that could convert a number into the corresponding character. The final code that