最近在学webpack为了方便把运行脚本写入package.json文件中,如下:

"scripts": {
    "start": "webpack-dev-server --progress",
    "build": "NODE_ENV=production webpack --config ./webpack.production.config.js --progress"
  }

但是运行npm run build后发现报错,检查了一遍运行脚本并无错误,本人使用的window7环境下的gitbash,本身是支持 linux 命令执行的。感觉应该跟这个有关系,npm-debug.log 报错内容是:

0 info it worked if it ends with ok
1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli   'C:\\Users\\supfn\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli   'run',
1 verbose cli   'build' ]
2 info using npm@4.0.3
3 info using node@v6.4.0
4 verbose run-script [ 'prebuild', 'build', 'postbuild' ]
5 info lifecycle webpack_sample_project@1.0.0~prebuild: webpack_sample_project@1.0.0
6 silly lifecycle webpack_sample_project@1.0.0~prebuild: no script for prebuild, continuing
7 info lifecycle webpack_sample_project@1.0.0~build: webpack_sample_project@1.0.0
8 verbose lifecycle webpack_sample_project@1.0.0~build: unsafe-perm in lifecycle true
9 verbose lifecycle webpack_sample_project@1.0.0~build: PATH: C:\Users\supfn\AppData\Roaming\npm\node_modules\npm\bin\node-gyp-bin;C:\webstorm-project\webpack_sample_project\node_modules\.bin;C:\Users\supfn\bin;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\local\bin;C:\Program Files\Git\usr\bin;C:\Program Files\Git\usr\bin;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Users\supfn\bin;C:\Program Files (x86)\Intel\iCLS Client;C:\Program Files\Intel\iCLS Client;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Git\cmd;C:\Program Files\Java\jdk1.8.0_102\bin;C:\Program Files\Java\jdk1.8.0_102\jre\bin;C:\Program Files\nodejs;C:\Users\supfn\AppData\Roaming\npm;C:\Program Files\Git\usr\bin\vendor_perl;C:\Program Files\Git\usr\bin\core_perl
10 verbose lifecycle webpack_sample_project@1.0.0~build: CWD: C:\webstorm-project\webpack_sample_project
11 silly lifecycle webpack_sample_project@1.0.0~build: Args: [ '/d /s /c',
11 silly lifecycle   'NODE_ENV=production webpack --config ./webpack.production.config.js --progress' ]
12 silly lifecycle webpack_sample_project@1.0.0~build: Returned: code: 1  signal: null
13 info lifecycle webpack_sample_project@1.0.0~build: Failed to exec build script
14 verbose stack Error: webpack_sample_project@1.0.0 build: `NODE_ENV=production webpack --config ./webpack.production.config.js --progress`
14 verbose stack Exit status 1
14 verbose stack     at EventEmitter.<anonymous> (C:\Users\supfn\AppData\Roaming\npm\node_modules\npm\lib\utils\lifecycle.js:279: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:\Users\supfn\AppData\Roaming\npm\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:852:16)
14 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:215:5)
15 verbose pkgid webpack_sample_project@1.0.0
16 verbose cwd C:\webstorm-project\webpack_sample_project
17 error Windows_NT 6.1.7601
18 error argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\supfn\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js" "run" "build"
19 error node v6.4.0
20 error npm  v4.0.3
21 error code ELIFECYCLE
22 error webpack_sample_project@1.0.0 build: `NODE_ENV=production webpack --config ./webpack.production.config.js --progress`
22 error Exit status 1
23 error Failed at the webpack_sample_project@1.0.0 build script 'NODE_ENV=production webpack --config ./webpack.production.config.js --progress'.
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 webpack_sample_project package,
23 error not with npm itself.
23 error Tell the author that this fails on your system:
23 error     NODE_ENV=production webpack --config ./webpack.production.config.js --progress
23 error You can get information on how to open an issue for this project with:
23 error     npm bugs webpack_sample_project
23 error Or if that isn't available, you can get their info via:
23 error     npm owner ls webpack_sample_project
23 error There is likely additional logging output above.
24 verbose exit [ 1, true ]

尝试着直接在命令行下执行:

NODE_ENV=production webpack --config ./webpack.production.config.js --progress

是没问题的,但结合到 npm scripts 上,却运行失败。

当我们去掉这个 env 设定,再次执行 npm run build 命令:

"scripts": {
    "start": "webpack-dev-server --progress",
    "build": " webpack --config ./webpack.production.config.js --progress"
  }

就会发现没问题了,但结果当然是不是我想要的,没有设置环境。

怎么办?

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

"scripts": {
    "start": "webpack-dev-server --progress",
    "build": node build.js
  }

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

var ora = require('ora');
var webpack = require('webpack');
var webpackConfig = require('./webpack.production.config');
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
        }) + '\n')
});

最后运行 npm run build 结果成功,果然还是最佳实践靠谱一点。
本着多学无害的本心,在网上搜索了一些资料,最后发现一种更简单的方法,直接在package.json里面修改scripts值得内容:

"scripts": {
    "start": "webpack-dev-server --progress",
    "build": "set NODE_ENV=production && webpack --config ./webpack.production.config.js --progress"
  }

这样运行npm run build 也是可以的。

windows下npm scripts不能执行的问题的更多相关文章

  1. windows下编写shell脚本执行错误

    在 windows 下,换行符是 \r\n,在linux下,换行符是 \n.如果你在IDEA里写sh脚本,可以手动设置脚本的换行符为 \n,如果你用notepad++写脚本,可以显示所有字符,以便明确 ...

  2. 【微信Java开发 --1---番外1】在windows下,使用JAVA执行多条DOS命令+文件夹/路径中有空格怎么解决【目的是实现内容穿透外网】

    内网穿透外网的那一篇,参正集1 但是每次都要Ctrl+R 启动DOS窗口,也就是CMD,一句一句的去粘,略显繁琐. 所以将这些任务写在JAVA程序中,启动一次程序就可以实现[内网穿透]的功能,多好啊! ...

  3. 环信webim1.1.2版本在windows下npm环境搭建错误解决

    1.1.2版本的webim从ui到整体的代码结构都做了很大改变,从代码结构上采用node.js的环境进行开发和打包,最终打包的输出项目,不依赖node.js的环境进行运行,得益于webpack的打包实 ...

  4. windows下npm安装vue

    一.使用之前,我们先来掌握3个东西是用来干什么的. npm: Nodejs下的包管理器. webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资 ...

  5. Windows 下Npm和NodeJS升级

    前提电脑中已经安装过NodeJS, npm.现在需要进行升级操作. 1.查看当前的npm和NodeJs的版本: C:\Users\Administrator>node -vv4.4.3 C:\U ...

  6. windows下使用Eclipse编译执行MapReduce程序 Hadoop2.6.0/Ubuntu

    一.环境介绍 宿主机:windows8 虚拟机:Ubuntu14.04 hadoop2.6伪分布:搭建教程http://blog.csdn.net/gamer_gyt/article/details/ ...

  7. Windows下直接双击可执行的jar

    如果没有设置,那么就是用命令行: jar处在文件夹路径下打开命令行:java -jar xxx.jar 总的来说是有点不方便 首先默认打开jar程序得是相同jdk的java.exe 然后是一闪而过 下 ...

  8. windows下npm和node如何升级

    1.npm升级 访问官网:npm 可以看到如下图: 就是如果你要更新你的版本,请在终端输入以下语句: npm install npm@latest -g 效果如下图:  2.node升级 直接在nod ...

  9. windows下npm默认的全局路径

    C:\Users\用户名\AppData\Roaming\npm\node_modules

随机推荐

  1. html中静态进度条的实现

    代码如下: <div> <div style="position: relative; height: 20px; width: 500px; border: 1px so ...

  2. 国内外最全面和主流的JS框架与WEB UI库

    当下对于网站前段开发人员来说,很少有人不使用一些JS框架或者WEB UI库,因此这些可以有效提高网站前段开发速度,并且能够统一开发环境,对于不同浏览器的兼容性也不需要程序员操心,有了这些优点,当然大家 ...

  3. 【转】webAPP快速入门

    WebApp与Native App有何区别呢? Native App: 1.开发成本非常大.一般使用的开发语言为JAVA.C++.Objective-C. 2.更新体验较差.同时也比较麻烦.每一次发布 ...

  4. bitnami redmine安装、配置、备份、恢复(这篇文章靠谱)

    bitnami redmine安装.配置.备份.恢复 2012-12-17 12:33 2596人阅读 评论(0) 收藏 举报 1. 安装时语言选择英文,不可以选择中文,否则不能正常运行,可以在账户里 ...

  5. OpenGL Development Cookbook chapter7部分翻译

    让我们通过以下简单步骤开始我们的配方: 1.通过读取外部的体数据文件,并通过该加载数据集数据转换成一个OpenGL纹理.也使硬件的mipmap生成.通常情况下,从使用一个横截面中获得的体积数据文件存储 ...

  6. Markdown 代码测试!

    # Mou ![Mou icon](http://mouapp.com/Mou_128.png) ## Overview **Mou**, the missing Markdown editor fo ...

  7. Linux系统编程:客户端-服务器用FIFO进行通信

    先放下代码  回来在解释 头文件: clientinfo.h struct CLIENTINFO{ ]; int leftarg; int rightarg; char op; }; typedef ...

  8. CentOS上搭建java WEB开发环境Tomcat+MySQL+JDK

    对于初学者来说,想在linux系统上搭建一个java web服务器,不知道什么方案可行, 这篇文章主要是告诉这些基础和概念相对薄弱的同学,这样搭建是可行的,大体上没问 题的,出问题也是细节问题.所以此 ...

  9. BFS和DFS详解

    BFS和DFS详解以及java实现 前言 图在算法世界中的重要地位是不言而喻的,曾经看到一篇Google的工程师写的一篇<Get that job at Google!>文章中说到面试官问 ...

  10. Devexpress XtraReports 交叉报表

    [原创]Devexpress XtraReports 系列 5 创建交叉报表   昨天我们已经介绍了如何创建多栏报表,详见:[原创]Devexpress XtraReports 系列 4 创建多栏报表 ...