最近在开发中遇到一个问题,webpack打包失败,报以下错误:

Error: UNKNOWN: unknown error, open 'C:\xxx\yyy\zzz.js'    at Error <native>
  • 分析

由于在不启动服务的情况下使用webpack打包是正常的,所以觉得应该与jetty有关。通过查找资料,最后发现是jetty锁定了静态资源文件。

  • 原因

在windows系统中,jetty默认在内存中映射了这些文件, 而windos会锁定内存映射的文件。

  • 解决方法:

    • 为了方便开发,我就直接修改了我本地的 jetty-webapp-9.4.0.M1.jar 中的webdefault.xml文件,路径如下:


    jetty-webapp-9.4.0.M1.jar\org\eclipse\jetty\webapp\webdefault.xml

    在此文件中搜索 useFileMappedBuffer,将它的值改为false即可。

      <init-param>                
          <param-name>useFileMappedBuffer</param-name>                
          <param-value>false</param-value>        
      </init-param>   
    

    改完后重启服务,再使用webpack打包时即可正常

    • 网上还有第二种方式(未亲测):


    修改WEB-INF/web.xml文件,在其中加入以下配置:

      <servlet>                
          <servlet-name>default</servlet-name>                        
          <init-param>                                
              <param-name>useFileMappedBuffer</param-name>                                
              <param-value>false</param-value>                        
          </init-param>        
      </servlet>