VSD*_*kar 2 node.js npm npm-scripts
是否可以从"scripts"package.json 部分中的配置文件中读取?
问题背景:我们是几个开发人员,他们都在同一台终端服务器上工作。我们的 package.json 中有以下部分
...
"scripts": {
"serve": "vue-cli-service serve --port 8080"
}
...
Run Code Online (Sandbox Code Playgroud)
由于我们位于同一服务器上,因此我们需要一种方法来指定不同的端口。一种可能性是使用命令行参数。但我希望有一种“更简单”的方式,我可以将端口存储在我添加的配置文件中.gitignore,这样每个开发人员都可以拥有自己的文件,我们只需键入而npm run serve无需考虑输入端口。
也许有更好的方法来做我想做的事。我愿意接受建议。
\n\n一种可能性是使用命令行参数。
\n
是的,为此您需要serve在package.json中配置脚本,如下所示:
"scripts": {\n "serve": "vue-cli-service serve --port"\n}\nRun Code Online (Sandbox Code Playgroud)\n然后通过 CLI 工具运行:
\nnpm run serve -- <port_number>\nRun Code Online (Sandbox Code Playgroud)\n注意:参数<port_number>应替换为真实的端口号,例如8080等3000...
\n\n...我希望有一种“更简单”的方式可以将端口存储在配置文件中...
\n
配置文件:
\n假设我们有一个任意命名的文件,.portnumber该文件保存在项目目录的根目录中。例如:
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .gitignore\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .portnumber <------ \n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 node_modules\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ...\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ...\nRun Code Online (Sandbox Code Playgroud)\n文件的内容.portnumber包含仅要使用的端口号。例如:
3000\nRun Code Online (Sandbox Code Playgroud)\n在*nix平台上运行 npm 脚本时,npm 使用的默认 shell 是sh. 因此,以下内容将起作用。
包.json
\n3000\nRun Code Online (Sandbox Code Playgroud)\n上面的部分$(<.portnumber)本质上是读取文件的内容.portnumber(这就是该<.portnumber部分的作用),并使用命令 Substitution。
因此,鉴于该.portnumber文件包含3000npm 脚本中正在执行的命令,则有效:
"scripts": {\n "serve": "vue-cli-service serve --port \\"$(<.portnumber)\\""\n}\nRun Code Online (Sandbox Code Playgroud)\n你也可以这样做:
\n包.json
\nvue-cli-service serve --port 3000\nRun Code Online (Sandbox Code Playgroud)\n这与前面的非常相似,但是如果.portnumber文件不存在或为空,则默认使用8080端口号。
对于跨平台解决方案(即在 Windows、Linux 和 macOS 上成功运行的解决方案),您需要利用 Nodejs 来满足您的要求。有几种不同的方法可以解决此问题,如以下标题为以下两个小节中所述:
\n创建一个名为serve.js
服务.js
\n"scripts": {\n "serve-with-default": "port=$(<.portnumber); vue-cli-service serve --port \\"${port:-8080}\\""\n}\nRun Code Online (Sandbox Code Playgroud)\n..并将其保存在您的项目目录中:
\nconst readFileSync = require(\'fs\').readFileSync;\nconst execSync = require(\'child_process\').execSync;\n\nconst port = readFileSync(\'.portnumber\', {encoding: \'utf8\'});\n\nexecSync(\'vue-cli-service serve --port \' + port, {stdio: \'inherit\'})\nRun Code Online (Sandbox Code Playgroud)\n重新定义您的servenpm 脚本,如下所示:
包.json
\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .gitignore\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .portnumber <------ \n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 node_modules\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ...\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 serve.js <------ \n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ...\nRun Code Online (Sandbox Code Playgroud)\n解释:
\n该serve.js文件主要执行以下操作:
利用内置的node.jsreadFileSync读取文件内容.portnumber并将数字分配给port变量。
然后利用内置的node.js 使用之前从文件中读取的端口号execSync运行命令。vue-cli-service serve --port.portnumber
或者,您可以将 Nodejs/JavaScript 代码内联到 package.json 的脚本部分。在这种情况下,请重新定义您的 npm 脚本,如下所示:
\n包.json
\n"scripts": {\n "serve": "node serve"\n}\nRun Code Online (Sandbox Code Playgroud)\n解释:
\n.js但是现在使用单独的 Nodejs 脚本/文件是多余的。-e用于评估内联 JavaScript。| 归档时间: |
|
| 查看次数: |
5196 次 |
| 最近记录: |