我正在尝试在package.json中设置一个脚本,它运行Coffeescript/Sass /等各种各样的手表.
这是我在我的服务器上使用的脚本,工作正常.
"dev": "coffee --watch --compile js/ & coffee --watch --compile controllers/ & supervisor -e html,js js/index.js",
Run Code Online (Sandbox Code Playgroud)
然而,当我在本地尝试相同的脚本时,它似乎只运行第一个命令.Windows似乎不知道如何处理&.每个命令都可以单独运行,但它们不会全部一起执行.
npm-run-all从我所看到的是最受欢迎的包.它将脚本run-s(顺序)和run-p(并行)添加到项目bin中,使它们可以从项目脚本部分使用.
对于以下package.json脚本:
"scripts": {
"start": "npm run build -- --watch",
"prebuild": "rimraf lib dist",
"build:dist": "rollup -c --sourcemap inline --environment NODE_ENV:production",
"build": "babel src -d lib --ignore __tests__,__mocks__",
"preversion": "npm run build && npm run build:dist",
"test": "jest"
}
Run Code Online (Sandbox Code Playgroud)
如果您想修改preversion脚本npm-run-all,可以将其缩短为run-s build build:dist.如果您希望它们并行运行,而不是按顺序运行,您将使用:run-p build build:dist.它有恢复错误的选项,将参数传递给所有脚本,并且可以跨平台工作.
最近,我一直把我的项目分成微模块.一旦我开始面对你遇到的那种问题,这表明我的项目太大了.大型项目有利于能够找到所有内容并为每个版本保留单个版本,但会导致构建和部署问题.对于大型存储库,您必须为以下类型的事物编排单独的构建:
NODE_ENV)它会将你的package.json变成一场灾难.
为了解决这些问题并仍然保持良好的版本控制和协调,我在每个项目上使用Lerna(npm i -g lerna@prerelease).它设置了一个monorepo,packages/其中包含一个包含每个项目npm包的目录.lerna bootstrap然后执行lerna run start链接所有彼此依赖的包,然后在定义一个包的所有包中运行npm启动脚本.lerna run命令默认并行执行,但可以按顺序运行--concurrency=1.我发现没有太小的项目无法保证使用lerna,它使小项目变得不那么繁琐.
create-react-app是将生态系统转变为模块化设计的项目的一个很好的例子.它最基本的要素,3个脚本(start,test,build)和第四eject脚本,其唯一的用途是将底层的模块化构建系统吐到你的项目目录.它非常快速和热量重新加载很好,但你选择较少(常见的误解).你实际上处于更好的状态而不是弹出,并从一个永不失败的构建系统中受益,它将获得可靠的升级.在模块中水平扩展系统,而不是在所有方向上呈指数级.
为了将这种设计应用于许多未被create-react-app(好东西)覆盖的构建系统,我创建了noderaider/modular lerna repo.它的工作原理基本相同create-react-app,但其目标是CLI/API模块创建包,它们可以很好地与Lerna上游一起工作create-react-app.我根据公约发布了夜莺create-<target>-module.这些包中的每一个都可以从CLI,package.json脚本运行,或通过其节点API进行编排.如果在路径中找到它,则使用纱线进行安装,npm否则返回.它具有Webpack 2,汇总,postcss和CLI包的当前工作支架,以及单元测试和代码覆盖.我目前正致力于模块化脚本,与lerna/的进一步凝聚create-react-app,以及完成路线图中的其余模块.欢迎拉/特色要求.期望每个包装都能快速地为您提供一个建筑,可测试,可发布的包装,其中包括travis-ci集成和1.0.0每个semver之前的快速更改.
TL; DR使用Lerna和模块化软件包,您将摆脱这些类型的问题
对于 Windows,内置等效项&是在命令前面加上start /B. 因此,您可能只需将“dev”设置为一个小节点脚本,该脚本使用内置函数child_process来执行以下操作:
var exec = require('child_process').exec;
var prefix = (process.platform === 'win32' ? 'start /B ' : '');
exec(prefix + 'coffee --watch --compile js/');
exec(prefix + 'coffee --watch --compile controllers/');
exec(prefix + 'supervisor -e html,js js/index.js');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6724 次 |
| 最近记录: |