我已经将所有我的Linting配置和相关的软件包/插件/预设(用于更漂亮,stylelint,eslint,commitlint)移到了npm软件包中。然后,我在多个项目中使用该软件包,并将配置扩展或合并到项目的本地配置文件中,以确保一致性并消除安装和保持开发依赖项最新状态的需要。
在配置旁边,我有许多有用的npm脚本,它们运行linters并执行各种其他与开发相关的功能,例如:
"lint:prettier": "prettier 'src/**/*.{js,json}' --write",
"lint:eslint": "eslint 'src/**/*.js'",
"lint:compatibilityCheck": "eslint --print-config .eslintrc.js | eslint-config-prettier-check",
"lint": "npm run lint:compatibilityCheck && npm run lint:prettier && npm run lint:eslint"
这些脚本当前在我的所有项目中重复,但是我想将这些脚本与共享包一起分发,以便在一个位置定义它们。我该怎么办?
答案 0 :(得分:2)
从npm blogn开始,似乎没有“直接方法”在npm软件包中公开开发脚本。博客文章建议使用shelljs
模块创建运行首选脚本的JavaScript文件。
示例:假设您要公开lint:prettier": "prettier 'src/**/*.{js,json}' --write"
将通话包装在bin / lintprettier.js中:
#! /usr/bin/env node
var shell = require("shelljs");
const path = require("path")
process.env.PATH += (path.delimiter + path.join(process.cwd(), 'node_modules', '.bin'));
shell.exec("prettier 'src/**/*.{js,json}' --write");
然后将其添加到package.json中导出的控制台脚本中:
...
"bin": {
"lint-prettier": "bin/lintprettier.js"
}
...
最后,您可以在项目中重复使用脚本:
"scripts": {
"build": "...",
"lint:prettier": "lint-prettier"
}
答案 1 :(得分:0)
我不确定尝试并允许依赖项更改依赖配置是否正确,即使我知道简单的方法也可以。
相反,不要尝试从底部到顶部。我极力建议使用lerna。
这是一个用于在monorepo中管理软件包的好工具,您甚至可以提升软件包之间的共享依赖关系,而且对于您的问题,它允许在所有软件包的顶部定义一个主package.json
一次定义npm script
,然后使用一个命令为所有软件包(或使用scope
功能的其中几个软件包)运行它。
答案 2 :(得分:0)
一种方法是使用Builder。
Builder允许您将npm脚本作为NPM软件包发布,并在安装了包含脚本的软件包的任何项目中运行它们。
在用例中,我将所有build / test / lint脚本放入NPM软件包中,然后在所有其他项目中安装了该软件包。然后,在每个项目中,我都可以运行完全相同的命令。
Builder近期没有得到高度维护,但是它相当稳定,并且我已经成功地使用了它。自述文件非常详尽,几乎描述了您需要了解的所有内容。
克里斯蒂亚诺的答案也很好,因为采用这种方法可能会让您更好地控制解决方案的实现,而对于Builder,这是另一个具有自己的实现(且几乎没有问题)的项目。
答案 3 :(得分:0)
我制作了解决此类问题的工具。我称之为Dictator Builder。它有助于创建独立于其NPM软件包的独裁者。
可以将独裁者配置为指定scripts
中的package.json
,并提供所需的其他任何配置文件:
{
"message": "Setup package.json and linting",
"actions": [
{
"message": "Should have lint script in package.json",
"haveJsonPathValues": [
{
"expression": "$.scripts.lint",
"value": "npm run eslint"
}
],
"target": "package.json"
},
{
"copyFrom": "static-files",
"target": "."
}
]
}