摘要:今天有开发的同事问我说,在本机开发的上运行构建命令报错,不知道怎么回事儿。比如我们直接在命令行下执行都是没问题的,但结合到上,却运行失败。
今天有开发的同事问我说,在本机开发的 windows 上运行构建命令报错,不知道怎么回事儿。
作为一名 Mac 用户,当然也不知道为什么啦,过去看看,果然有错误。
我们的开发构建命令是基于 npm 的 scripts,其实就是很简单的一句话:
{ "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 odejs ode.exe", 1 verbose cli "C:Program Files odejs ode_modules pmin pm-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 odejs ode_modules pmin ode-gyp-bin;ode_modules.bin;C:Users in;F:Gitmingw64in;F:Gitusrlocalin;F:Gitusrin;F:Gitusrin;F:Gitmingw64in;F:Gitusrin;C:Users in;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program Files odejs;C:Goin;C:Users AppDataLocalMicrosoftWindowsApps;C:Users AppDataRoaming pm;F:Gitusrinvendor_perl;F:Gitusrincore_perl 10 verbose lifecycle @~build: CWD: 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. (C:Program Files odejs ode_modules pmlibutilslifecycle.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. (C:Program Files odejs ode_modules pmlibutilsspawn.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 17 error Windows_NT 10.0.14393 18 error argv "C:Program Files odejs ode.exe" "C:Program Files odejs ode_modules pmin pm-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 err process.stdout.write(stats.toString({ colors: true, modules: false, children: false, chunks: false, chunkModules: false }) + " ") })
这其实也是 vue 脚手架自动生成的构建方式,果然还是最佳实践靠谱一点。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/91269.html
摘要:原文地址如果您对本系列文章感兴趣,欢迎关注订阅这里前言本文介绍如何在多项目间共用同一套基础设施,又或是某种层次的框架。而以上所述的种种,就构成了一套完整的解决方案,也称基础设施。下面就以从到的改造过程来介绍如何实现多项目共用基础设施。 本文首发于Array_Huang的技术博客——实用至上,非经作者同意,请勿转载。原文地址:https://segmentfault.com/a/1190...
摘要:使用发布将项目打包后部署到上是常见需求。需要使用到的库。关于的知识,参考使用指南用打造超溜的前端工作流需付费修改此时,虽然可以发布,但所有相关的静态文件的目录都是指向的,而实际的静态文件的位置是在中。 使用npm-scripts发布Github Pages 将项目打包后部署到GitHub Pages 上是常见需求。这里总结下通过npm-srcrips将项目发布到gh-pages分支。需...
摘要:提供非常方便的功能,让我们在命令行即可执行如等预定义的命令。所以我开源了库,让你在命令行即可方便的管理,通过即可安装提供个命令列出当前的命令在中设置一个命令删除中对应的命令 npm 提供非常方便的 npm-scripts 功能,让我们在命令行即可执行如 npm start 等预定义的命令。但是定义命令却稍显麻烦,需要打开 package.json 文件,找到 scripts 字段,增加...
摘要:实现一个命令完成打包同步上传服务器说明由于我们用的七牛云存储,所以也是走的七牛,所以并不适用于其他的,但是思路可以借鉴打包打包目前我这边用的是,网上已经有很多文章了,这里就不作过多阐述了,只是说一下这个参数,如果要做同步肯定是要配置这个参 webpack+gulp+qshell+npm-scripts实现一个命令完成[打包+同步cdn+上传服务器] 说明 由于我们用的七牛云存储,所以c...
阅读 2477·2023-04-26 00:42
阅读 2783·2021-09-24 10:34
阅读 3786·2021-09-24 09:48
阅读 4123·2021-09-03 10:28
阅读 2548·2019-08-30 15:56
阅读 2754·2019-08-30 15:55
阅读 3215·2019-08-29 12:46
阅读 2212·2019-08-28 17:52