标签: npm-scripts

将命令行参数传递给package.json中的npm脚本

我在package.json中有以下脚本:

"scripts": {
    "vumper": "node node_modules/vumper/index.js",
    "format": "prettier --single-quote -width=80 --write package.json"
 },
Run Code Online (Sandbox Code Playgroud)

'vumper'包接受命令行参数(例如'dv').我希望能够做的是拥有一个连续运行这两个命令的命令.

基本上,我希望能够运行:

npm run vumber dv
Run Code Online (Sandbox Code Playgroud)

然后

npm run format
Run Code Online (Sandbox Code Playgroud)

但在一个命令中,类似于

npm run my-build dv
Run Code Online (Sandbox Code Playgroud)

这将运行上述两个命令,正确接受命令行参数'dv'并将其传递给第一个npm run vumper.这可能吗?

npm package.json npm-scripts

13
推荐指数
3
解决办法
2万
查看次数

如何使用npm脚本将typescript编译成javascript然后编译成1个文件

我当前的整个package.json文件.

"scripts": {
    "build": "webpack",
    "start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\"",
    "lite": "lite-server",
    "postinstall": "typings install",
    "tsc": "tsc",
    "tsc:w": "tsc -w",
    "typings": "typings",
    "build:css": "node-sass --output-style compressed --include-path scss scss/lifeleveler.scss app/assets/css/app.css",
    "build:css-expand": "node-sass --include-path scss scss/lifeleveler.scss app/assets/css/app.css",
    "watch:css": "nodemon -e scss -x \"npm run build:css\"",
    "watch:css:expand": "nodemon -e scss -x \"npm run build:css-expand\"",
    "build:js": "browserify dist/main.js > dist/lifeleveler.app.js",
    "watch": "npm run watch:css & npm run watch:js",
    "watch:js": "onchange '/dist/**/*.js' -p -- npm run build:js"
},
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用1个 …

javascript build npm package.json npm-scripts

12
推荐指数
1
解决办法
1501
查看次数

npm package.json OS特定脚本

我想创建一个package.json构建脚本,在从Windows,Linux,Mac运行时执行稍微不同的命令集.

问题是我无法找到一种方法将它放在package.json文件中,在每个系统上运行都没有问题.

这是我想要的一个例子:

"scripts" : {
    "build.windows" : "echo do windows specific stuff",
    "build.linux" : "echo do linux specific stuff",
    "build.mac" : "echo do mac specific stuff",
    "build" : "??????????????" <- what to put here to execute script designed for OS
                                  on which npm is running
}
Run Code Online (Sandbox Code Playgroud)

node.js npm package.json npm-scripts

12
推荐指数
2
解决办法
6753
查看次数

在npm脚本中运行批处理文件

是否可以以及如何在npm命令中运行批处理脚本?

我有一个角度项目,在package.json文件中,在scripts节下,我想定义一个npm命令来运行批处理脚本.我知道我可以用关键字运行shell脚本,bash例如

"start": "cd mydir && bash ./myscript"
Run Code Online (Sandbox Code Playgroud)

然后我可以npm start在我的项目目录中运行,该目录将更改目录并执行myscript.sh脚本.在npm中运行批处理脚本的等效关键字是什么?

新手在这里.对不起,如果这是一个重复的问题; 也许我没有搜索正确的术语,但我无法找到这个问题的答案.

batch-file npm-scripts

12
推荐指数
1
解决办法
7295
查看次数

NPM Run Build 始终构建生产而不是开发

在我拥有的继承项目中,我试图获取构建命令来构建Production.

我试图更改script部分中的别名package.json以传递额外的变量,例如--dev--configuration=dev无济于事。


该项目有这些json数据文件:

 env.dev
 env.development
 env.production
Run Code Online (Sandbox Code Playgroud)

有我运行的package.json这个构建别名:build:devnpm run build:dev

"scripts": {
    "start": "NODE_ENV=dev && react-scripts start",
    …
    "build:dev": "npm run build --dev --configuration=dev && react-scripts build"
}
Run Code Online (Sandbox Code Playgroud)

这有效并构建,但仅适用于我在查看结果文件时验证的生产。


如果我env.production从目录中删除文件并运行构建命令,它会失败:

Creating an optimized production build...
Failed to compile.

Module not found: Error: Can't resolve 'polyfills' in 'C:\Work\MyProj\WebSiteName\src'
Run Code Online (Sandbox Code Playgroud)

这只是告诉我它可以polyfillsenv.production文件中找到该位置的别名NODE_PATH=src/

想法?

node.js npm package.json npm-scripts

11
推荐指数
1
解决办法
2万
查看次数

如何避免使用 Yarn 在 monorepo 中安装软件包

我使用LernaYarn 工作区构建了一个 monorepo 。

一切正常,但每次我在包上安装新的依赖项(我们称他为A)时,使用:

yarn add <package_name>
Run Code Online (Sandbox Code Playgroud)

Yarn 添加它,然后触发installmonorepo 中所有包的脚本,即使是A不依赖的包。

无论如何要避免这种情况?无缘无故地安装它们需要一些时间。

javascript lerna monorepo npm-scripts yarnpkg

11
推荐指数
2
解决办法
2864
查看次数

如何在 monorepo 中实时重新加载本地 npm 包?

我正在为 Vue 3(vite + ts)、云函数和共享库(共享函数和 ts 接口等)设置一个 monorepo 工作区。

我可以导入本地共享库文件夹来工作。我通过在我的共享库上执行 npm run build -- -- watch 来在我的前端项目中进行实时类型检查。

然而由于某种原因,除非我卸载然后安装共享库包,否则转换为 Javascript 的所有内容都不会更新。

例如:在共享库中创建 const 并不能使其在我导入共享库的前端/后端项目中可用。但是创建一个界面,就是这样。

我尝试了一些方法并搜索了互联网的大部分内容。我尝试使用 vite.config,因为我认为它可能会对包进行某种缓存。

现在,我的 vite.config.ts 如下所示:

import { defineConfig } from "vite"
import vue from "@vitejs/plugin-vue"

// https://vitejs.dev/config/
export default defineConfig({
  server: {
    host: true,
  },
  plugins: [vue()],
  resolve: {
    preserveSymlinks: true,
  },
  optimizeDeps: {
    include: ["shared-lib"],
  },
})
Run Code Online (Sandbox Code Playgroud)

这是我的共享库中的index.ts:

// this is not usable / doesn't update live.
export const sharedConst = () => console.log("testing shared functionality") …
Run Code Online (Sandbox Code Playgroud)

npm typescript monorepo npm-scripts vite

11
推荐指数
1
解决办法
4630
查看次数

错误:错误:0308010C:数字信封例程::不受支持(Node.js v19.4.0)

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:140:10)
    at module.exports (D:\web development\frontend\react\reduxbasic\node_modules\webpack\lib\util\createHash.js:90:53)
    at NormalModule._initBuildHash (D:\web development\frontend\react\reduxbasic\node_modules\webpack\lib\NormalModule.js:386:16)      
    at handleParseError (D:\web development\frontend\react\reduxbasic\node_modules\webpack\lib\NormalModule.js:434:10)
    at D:\web development\frontend\react\reduxbasic\node_modules\webpack\lib\NormalModule.js:466:5
    at D:\web development\frontend\react\reduxbasic\node_modules\webpack\lib\NormalModule.js:327:12
    at D:\web development\frontend\react\reduxbasic\node_modules\loader-runner\lib\LoaderRunner.js:373:3
    at iterateNormalLoaders (D:\web development\frontend\react\reduxbasic\node_modules\loader-runner\lib\LoaderRunner.js:214:10)       
    at iterateNormalLoaders (D:\web development\frontend\react\reduxbasic\node_modules\loader-runner\lib\LoaderRunner.js:221:10)       
    at D:\web development\frontend\react\reduxbasic\node_modules\loader-runner\lib\LoaderRunner.js:236:3
    at runSyncOrAsync (D:\web development\frontend\react\reduxbasic\node_modules\loader-runner\lib\LoaderRunner.js:130:11)
    at iterateNormalLoaders (D:\web development\frontend\react\reduxbasic\node_modules\loader-runner\lib\LoaderRunner.js:232:2)        
    at Array.<anonymous> (D:\web development\frontend\react\reduxbasic\node_modules\loader-runner\lib\LoaderRunner.js:205:4)
    at Storage.finished (D:\web development\frontend\react\reduxbasic\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:55:16)
    at D:\web development\frontend\react\reduxbasic\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:91:9
D:\web development\frontend\react\reduxbasic\node_modules\react-scripts\scripts\start.js:19
  throw err;
  ^

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:140:10)
    at module.exports …
Run Code Online (Sandbox Code Playgroud)

npm reactjs npm-start npm-scripts

11
推荐指数
4
解决办法
5万
查看次数

包含babel polyfill,但forEach仍然无法在NodeLists上的IE11中工作

我得的WebPack与巴贝尔工作,包括@通天塔/填充工具,还试图使用时IE11仍是投掷SCRIPT438错误.forEachNodeList.

这是我的 package.json

{
  ...
  "scripts": {
    "build:js": "webpack --config ./_build/webpack.config.js"
  },
  ...
  "browserslist": [
    "IE 11",
    "last 3 versions",
    "not IE < 11"
  ],
  "babel": {
    "presets": [
      [
        "@babel/preset-env",
        {
          "useBuiltIns": "usage"
        }
      ]
    ]
  },
  "devDependencies": {
    "@babel/core": "^7.1.6",
    "@babel/preset-env": "^7.1.6",
    "babel-loader": "^8.0.4",
    "webpack": "^4.25.1",
    "webpack-cli": "^3.1.2"
  },
  "dependencies": {
    "@babel/polyfill": "^7.0.0"
  }
}
Run Code Online (Sandbox Code Playgroud)

我的webpack.config.js:

const path = require('path');
const webpack = require('webpack');

module.exports = (env, argv) => {

  const javascript …
Run Code Online (Sandbox Code Playgroud)

javascript babel webpack babel-polyfill npm-scripts

10
推荐指数
1
解决办法
5666
查看次数

如何在Lerna包中共享构建脚本

我有一个lerna repo,它包含以通常结构组织的多个包:

package.json
/packages
  - alpha
    package.json
  - bravo
    package.json
  - charlie
    package.json
Run Code Online (Sandbox Code Playgroud)

我需要转换所有包,我目前在每个包中都有以下脚本package.json:

"build": "npm run build:noWatch -- --watch --verbose",
"build:noWatch": "babel src --out-dir lib --root-mode upward --ignore '**/*.test.js','**/__tests__'",
"prebuild": "rimraf lib/*"
Run Code Online (Sandbox Code Playgroud)

我目前使用以下命令运行构建:

lerna run build --stream --parallel
Run Code Online (Sandbox Code Playgroud)

但是,我不想为每个包复制这些脚本.我想在一个地方定义脚本,但是在所有包中使用它们.我目前在我的root包中有linting脚本和测试脚本,因为它们有效地遍历整个monorepo寻找测试或文件到lint.将构建脚本移动到那里以及将它们限定在各个包中并不是有意义的.我喜欢这样的事实:当我使用时,每个包都会得到不同的颜色输出lerna run.

一个令人不满意的解决方案是在monorepo的根目录中创建一些shell脚本,并从包的package.json文件中调用它们:

root/packages/example/package.json:

"scripts": {
  "build": "../../scripts/build.sh",
  "build:noWatch": "../../scripts/build.sh",
  "prebuild": "../../scripts/prebuild.sh"
},
Run Code Online (Sandbox Code Playgroud)

然后在root/scripts/build.sh:

#!/bin/sh 

babel src --out-dir lib --root-mode upward --ignore '**/*.test.js','**/__tests__' --watch --verbose 
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但感觉不对:它仍然涉及包之间的重复,并且需要设置shell脚本的权限(这使CI复杂化).

有没有更好的方法在我的所有包中共享这些命令?

javascript package lerna monorepo npm-scripts

10
推荐指数
1
解决办法
837
查看次数