Webpack / NPM:使用已安装模块的构建版本,而不是从源

时间:2017-04-20 15:42:51

标签: javascript node.js npm webpack dat.gui

我想将dat.GUI库用于使用Webpack 2构建的项目。如果我通过npm -install --save-dev dat.gui安装模块,然后尝试使用import * as DAT from 'dat.gui';导入它当Webpack尝试编译我的项目时出现以下错误:

ERROR in ./~/dat.gui/src/dat/controllers/NumberControllerSlider.js
Module not found: Error: Can't resolve 'style' in 
'/home/me/myProject/node_modules/dat.gui/src/dat/controllers'
BREAKING CHANGE: It's no longer allowed to omit the '-loader' suffix 
when using loaders.

我知道使用Webpack 2构建基于Webpack 1的项目时会发生此错误。但是,如果node_modules/dat.gui/build';内部已有构建版本,为什么Webpack甚至会尝试构建模块?有没有办法告诉Webpack或NPM使用现有的构建版本而不试图重新构建它?

1 个答案:

答案 0 :(得分:4)

导入节点模块时,webpack会查看其package.json并使用main field作为模块的条目,类似于Node.js的操作(webpack默认查找更多字段,请参阅{ {3}})。

因为对于dat.gui,主要字段并未指向内置版本,而是指向源,实际内联resolve.mainFields styleSheet导入的加载器,而不是一般来说这是一个好主意,当然也不会发表。

但您可以通过指定相应的路径来导入构建的版本。所以你的导入是:

import * as DAT from 'dat.gui/build/dat.gui.js';

如果您仍希望仅导入dat.gui,则可以将dat.gui@0.6.1 - NumberControllerSlider.js配置为指向内置版本,如下所示:

resolve: {
  alias: {
    'dat.gui': 'dat.gui/build/dat.gui.js'
  }
}

这样您就可以使用原始的import语句:

import * as DAT from 'dat.gui';