我想知道在运行tsc命令后是否可以将node_modules文件夹复制到输出目录中。
我的情况是我有一个使用TypeScript的项目并使用一些npm包。我需要我的输出目录具有所有npm依赖项,因为我需要压缩它并通过http发送(到AWS Lambda)。
我的项目结构是这样的:
|-.vscode --> visual studio code
|-lib --> output dir
|-node_modules --> npm dependencies
|-src --> .ts files
|-jsconfig.json
|-tsconfig.json
如何实现它?
非常感谢!
答案 0 :(得分:7)
我更喜欢Peopleware's解决方案,而不是公认的解决方案,但是您甚至不需要为此而烦恼。您可以在package.json中简单地做到这一点:
{
"scripts": {
"build": "tsc <your command line options>",
"postbuild": "cp package.json dist/package.json && cd dist && npm install --only=production"
}
}
您可以使用静态资产(例如图片)或不使用以下内容:
"copy-statics": "cp -r static dist/static"
答案 1 :(得分:5)
您应该只能cp
目录。如果要自动化它,可以将你的tsc
和cp
调用包装在package.json中的npm脚本中:
{
"scripts": {
"build": "tsc <your command line options>",
"postbuild": "cp -R node_modules lib/node_modules"
}
}
然后当您使用npm run build
时,您的cp
命令也会自动运行。
答案 2 :(得分:2)
为此,我创建了一个简单的gulp任务。
gulpfile.js:
var gulp = require('gulp');
var install = require('gulp-install');
const PROD_DEST = '../dist';
gulp.task('default', function () {
return gulp.src(['./package.json'])
.pipe(gulp.dest(PROD_DEST))
.pipe(install({
args: ['only=production']
}));
});
<小时/>
package.json
:
...
"scripts": {
"build:prod": "tsc && gulp"
}
"devDependencies": {
"gulp": "^3.9.1",
"gulp-install": "^0.6.0",
},
...
这样我就可以运行npm run build:prod
将TypeScript源转换为PROD_DEST
gulp
将package.json
复制到该文件夹中并在其中运行npm install --only=production
,其中仅安装运行时依赖项。
此方法清除< / strong>如果你有很多devDependencies和平台无关。
答案 3 :(得分:1)
此解决方案是对朴素解决方案的改进,该解决方案包括复制和粘贴整个node_modules文件夹。此外,它不会在目标文件夹中重新安装软件包,因为我们会将deps和/或devDeps从源node_modules复制粘贴到目标文件夹。
我们将使用npm ls
以树形形式列出已安装的软件包。请注意,默认格式输出包含多余的信息,并且包可以列出多次。因此,我们使用--parseable
标志。
$ npm ls --parseable
/home/code
/home/code/node_modules/mongodb
/home/code/node_modules/bson
...
您只能分别使用--only prod
和--only dev
列出依赖项或devDependencies
我们将前面的命令和一些bash工具放在一起。
mkdir -p lib/node_modules
npm ls --only prod --parseable | tail -n +2 | xargs -I % cp -r % lib/node_modules
确保目标文件夹已经存在,否则第一个软件包将不在其自己的文件夹中。
我们跳过第一行,因为它不是依赖项。
答案 4 :(得分:0)
这不是最优雅的解决方案,但是我可以通过将package.json
复制到/dist
文件夹并运行yarn install
来做到这一点。构建脚本如下所示:
tsc
-> ts文件放入/dist
package.json
(使用ts-node)复制到/dist
./src/views
复制到/dist/views
(用于Express)cd ./dist
然后yarn install
答案 5 :(得分:0)
您可以仅使用jenkins post build操作并定义如下
cp -R target/classes/static ../../../uistatic/dev
您可以选择自己的路径。