今天有开发的同事问我说,在本机开发的 windows 上运行构建命令报错,不知道怎么回事儿。
作为一名 Mac 用户,当然也不知道为什么啦,过去看看,果然有错误。

我们的开发构建命令是基于 npmscripts,其实就是很简单的一句话:

{"scripts": {..."build": "NODE_ENV=production webpack --progress --hide-modules"},...
}

这个命令在 Mac 下没有问题,在 windows 下运行却报如下错误:

0 info it worked if it ends with ok
1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli   'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli   'run',
1 verbose cli   'build' ]
2 info using npm@3.10.8
3 info using node@v6.9.1
4 verbose run-script [ 'prebuild', 'build', 'postbuild' ]
5 info lifecycle @~prebuild: @
6 silly lifecycle @~prebuild: no script for prebuild, continuing
7 info lifecycle @~build: @
8 verbose lifecycle @~build: unsafe-perm in lifecycle true
9 verbose lifecycle @~build: PATH: C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin;<WORK_DIR>\node_modules\.bin;C:\Users\<USER_DIR>\bin;F:\Git\mingw64\bin;F:\Git\usr\local\bin;F:\Git\usr\bin;F:\Git\usr\bin;F:\Git\mingw64\bin;F:\Git\usr\bin;C:\Users\<USER_DIR>\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\nodejs;C:\Go\bin;C:\Users\<USER_DIR>\AppData\Local\Microsoft\WindowsApps;C:\Users\<USER_DIR>\AppData\Roaming\npm;F:\Git\usr\bin\vendor_perl;F:\Git\usr\bin\core_perl
10 verbose lifecycle @~build: CWD: <WORK_DIR>
11 silly lifecycle @~build: Args: [ '/d /s /c',
11 silly lifecycle   'NODE_ENV=production webpack --progress --hide-modules' ]
12 silly lifecycle @~build: Returned: code: 1  signal: null
13 info lifecycle @~build: Failed to exec build script
14 verbose stack Error: @ build: `NODE_ENV=production webpack --progress --hide-modules`
14 verbose stack Exit status 1
14 verbose stack     at EventEmitter.<anonymous> (C:\Program Files\nodejs\node_modules\npm\lib\utils\lifecycle.js:255:16)
14 verbose stack     at emitTwo (events.js:106:13)
14 verbose stack     at EventEmitter.emit (events.js:191:7)
14 verbose stack     at ChildProcess.<anonymous> (C:\Program Files\nodejs\node_modules\npm\lib\utils\spawn.js:40:14)
14 verbose stack     at emitTwo (events.js:106:13)
14 verbose stack     at ChildProcess.emit (events.js:191:7)
14 verbose stack     at maybeClose (internal/child_process.js:877:16)
14 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
15 verbose pkgid @
16 verbose cwd <WORK_DIR>
17 error Windows_NT 10.0.14393
18 error argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "build"
19 error node v6.9.1
20 error npm  v3.10.8
21 error code ELIFECYCLE
22 error @ build: `NODE_ENV=production webpack --progress --hide-modules`
22 error Exit status 1
23 error Failed at the @ build script 'NODE_ENV=production webpack --progress --hide-modules'.
23 error Make sure you have the latest version of node.js and npm installed.
23 error If you do, this is most likely a problem with the  package,
23 error not with npm itself.
23 error Tell the author that this fails on your system:
23 error     NODE_ENV=production webpack --progress --hide-modules
23 error You can get information on how to open an issue for this project with:
23 error     npm bugs
23 error Or if that isn't available, you can get their info via:
23 error     npm owner ls
23 error There is likely additional logging output above.
24 verbose exit [ 1, true ]

调试了一下,问题就出在这个命令本身。

这位同学开发用的是 git-shell 自带的命令行,本身是支持 linux 命令执行的。
比如我们直接在命令行下执行:

NODE_ENV=production
export NODE_ENV=production

都是没问题的,但结合到 npm scripts 上,却运行失败。
当我们去掉这个 env 设定,再次执行 npm scripts 命令:

{"scripts": {..."build": "webpack --progress --hide-modules"},...
}

就会发现没问题了,但结果当然是不是我们想要的。


怎么办?

可以把要执行的代码写到独立的 JS 中,使用 node 命令来运行,比如:

{"scripts": {..."build": "node build/build.js"},...
}

build/build.js 文件中,再设定执行环境之类的:

var ora = require('ora')
var webpack = require('webpack')
var webpackConfig = require('../webpack.config.js')process.env.NODE_ENV = 'production'var spinner = ora('building for production...')
spinner.start()webpack(webpackConfig, function (err, stats) {spinner.stop()if (err) throw errprocess.stdout.write(stats.toString({colors: true,modules: false,children: false,chunks: false,chunkModules: false}) + '\n')
})

这其实也是 vue 脚手架自动生成的构建方式,果然还是最佳实践靠谱一点。

npm-scripts 在 windows 下的兼容问题相关推荐

  1. caffe 在 windows 下的配置(scripts\build_win.cmd)

    官网配置文档见:GitHub - BVLC/caffe at windows 1. windows 设置 requirements: visual studio 2013/2015 CMake > ...

  2. Windows下安装NPM

    2019独角兽企业重金招聘Python工程师标准>>> 由于Nodejs最初在Linux开发下的历史原因,导致NPM一开始也不支持Windows环境,但是随着Nodejs成功移植到到 ...

  3. Windows下安装node.js(npm) git+vue

    Windows下安装git+node.js+npm+vue 放到统一大文件夹下 下载node.js http://nodejs.cn/ npm是随同NodeJS一起安装的包管理工具,能解决NodeJS ...

  4. Windows 下npm升级方法

    Windows 下npm升级方法 本来是尝试在windows下用命令升级nodejs,结果发现浪费了挺大劲,升级的是npm,已经记录的差不多了,有不舍得删,特此另起一篇记录吧. 1. 首先更新npm为 ...

  5. windows下npm安装vue 问题和解决方法

    转载:https://www.cnblogs.com/liluxiang/p/9592003.html 问题解决方法: 1.nodejs npm错误Error:UNKNOWN:unknown erro ...

  6. (25)npm scripts 实践—构建脚本文件

    一.先来看2张对比图 通过如下2个图片,我们看到,我们应该构建好以后再进行浏览器中运行.没有构建前是ES6的箭头函数写法,我们要转换成ES5的写法然后再运行.为什么要构建?因为ES6再某些浏览器是不支 ...

  7. (21)npm scripts 实现自动化构建的最简方式

    一.什么是 npm scripts npm 允许在 package.json 文件中,使用 scripts 字段定义脚本命令. 二.npm scripts 自定义脚本命令 三.自动化构建样式文件 四. ...

  8. 在 Windows 下用 GCC 编译器练习 C/C++ 的简单教程

    2018年8月更新: 这个暑假博主和小伙伴.老师一同为师弟师妹们折腾了一个关于计算机学习交流的小社区 0xFFFF ,经过一个暑假的积淀,留下了不少适合计算机入门阅读的内容,推荐给看到这篇文章的你. ...

  9. npm scripts

    实现自动化构建的最简方式 什么是 npm scripts • npm 允许在 package.json 文件中,使用 scripts 字段定义脚本 npm scripts 自定义脚本命令 1. 声明命 ...

最新文章

  1. 【采用】干货请收好:终于有人把用户画像的流程、方法讲明白了
  2. My1stServlet
  3. QT的QMultiSampleAntiAliasing类的使用
  4. Webbots、Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)
  5. Android之解决VideoView控件的进度条位置摆放问题和打开播放黑屏问题
  6. Flask 源代码阅读笔记
  7. PAT100000575-剩下的树
  8. 二十年的编程,教会我的五件事!
  9. 带你全面了解Http和Https(开发人员必备)
  10. 【易微信系列一】查找附近的人
  11. 信息系统项目管理师 - 项目组合管理
  12. 光学efl_关于光学设计使用以及理解
  13. android gpu 视频编码,Android短视频SDK转码实践
  14. SQL Server 端口映射访问方法
  15. 前端开发全家桶:UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例
  16. ERROR: Failed to open zip file. Gradle‘s dependency cache may be corrupt (this sometimes occurs afte
  17. 架构设计软件EA使用指南
  18. html鼠标拖尾效果,前端每日实战:25# 视频演示如何用纯 CSS 创作一个慧星拖尾效果的 loader 动画...
  19. 程序设计基础c语言上机考试,程序设计基础C语言上机考试题第一套.DOC
  20. mxGraph 滚轮缩放

热门文章

  1. 记载学习Android的开发过程
  2. 三句话捋清楚java垃圾收集器
  3. 0523- 人员定位系统问题随手记
  4. JAVA 正则表达式 (超详细) .
  5. NettyMina (转)
  6. 在外键上创建索引V1.0
  7. 关于调试,很大的感触,请看下面的c程序
  8. sass笔记 - 实战中颜色的玩法总结
  9. AcWing 890. 能被整除的数(容斥原理)
  10. MapReduce过程详解