"Cannot find module" 在 browserify 中不破坏包时
"Cannot find module" in browserify when not mangling the bundle
我有一个自定义库,正在尝试使用 Browserify 构建。该库使用 fabric.js
,使用一些自定义 类 对其进行扩展,并将其全局公开以在浏览器和 node.js 中使用。这是库的主要入口点:
(function () {
"use strict";
// Make fabric global in browsers and node
this.fabric = require('./libs/fabric.canvasex.js');
this.fabric.internal_version = "1.0.0";
require('./libs/BoundedText/BoundedText.js');
require('./libs/BoundedText/PathText/PathIText.js');
require('./libs/VectorPlaceholder/fabricVectorPlaceholder.js');
require('./libs/ImagePlaceholder/fabricImagePlaceholder.js');
}).call(this);
这个库的文件结构是这样的:
要将此库构建为单个文件,我正在使用此命令:
browserify --full-paths js/main.js | uglifyjs --compress --mangle safari10 > dist/my-lib.js
这很好用,我可以将其包含在浏览器中并在 node.js 中要求它,它也成为一个全局变量,这正是我所需要的。当我必须调试某些东西时,问题就开始了,而缩小的代码显然不适合这个,所以我像这样捆绑库:
browserify --full-paths js/main.js > dist/my-lib.js
现在,当我尝试使用 browserify
将此构建包含在另一个节点程序中时,如下所示:
require('./customily-fabric.js');
我在将我的程序与库捆绑在一起时遇到这些错误:
[1] Error: Cannot find module '../fabric.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './OpentypeIText.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './startsWith-polyfill.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './Font.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module '../../fabric.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './ctxtextpath.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './path-properties.min.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module '../potrace.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './fabricMaskFilter.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './fabric.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './libs/BoundedText/BoundedText.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './libs/BoundedText/PathText/PathIText.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './libs/VectorPlaceholder/fabricVectorPlaceholder.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './libs/ImagePlaceholder/fabricImagePlaceholder.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './libs/fabric.canvasex.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
我发现,如果我只从我的库构建中删除 --mangle
选项,我会在尝试将其包含在另一个节点程序中时遇到这些错误。为什么会这样?不应该所有模块都包含在包中吗?
经过一番查找,终于找到原因,使用browserify时无法添加与browserify捆绑的库,参见this问题。
此功能将在 browserify 17 中推出,所以现在,我切换到 webpack 来构建我的库。
我有一个自定义库,正在尝试使用 Browserify 构建。该库使用 fabric.js
,使用一些自定义 类 对其进行扩展,并将其全局公开以在浏览器和 node.js 中使用。这是库的主要入口点:
(function () {
"use strict";
// Make fabric global in browsers and node
this.fabric = require('./libs/fabric.canvasex.js');
this.fabric.internal_version = "1.0.0";
require('./libs/BoundedText/BoundedText.js');
require('./libs/BoundedText/PathText/PathIText.js');
require('./libs/VectorPlaceholder/fabricVectorPlaceholder.js');
require('./libs/ImagePlaceholder/fabricImagePlaceholder.js');
}).call(this);
这个库的文件结构是这样的:
要将此库构建为单个文件,我正在使用此命令:
browserify --full-paths js/main.js | uglifyjs --compress --mangle safari10 > dist/my-lib.js
这很好用,我可以将其包含在浏览器中并在 node.js 中要求它,它也成为一个全局变量,这正是我所需要的。当我必须调试某些东西时,问题就开始了,而缩小的代码显然不适合这个,所以我像这样捆绑库:
browserify --full-paths js/main.js > dist/my-lib.js
现在,当我尝试使用 browserify
将此构建包含在另一个节点程序中时,如下所示:
require('./customily-fabric.js');
我在将我的程序与库捆绑在一起时遇到这些错误:
[1] Error: Cannot find module '../fabric.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './OpentypeIText.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './startsWith-polyfill.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './Font.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module '../../fabric.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './ctxtextpath.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './path-properties.min.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module '../potrace.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './fabricMaskFilter.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './fabric.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './libs/BoundedText/BoundedText.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './libs/BoundedText/PathText/PathIText.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './libs/VectorPlaceholder/fabricVectorPlaceholder.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './libs/ImagePlaceholder/fabricImagePlaceholder.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
[1] Error: Cannot find module './libs/fabric.canvasex.js' from 'D:\Git-Repos\Customily\CustomilyFabric\dist'
我发现,如果我只从我的库构建中删除 --mangle
选项,我会在尝试将其包含在另一个节点程序中时遇到这些错误。为什么会这样?不应该所有模块都包含在包中吗?
经过一番查找,终于找到原因,使用browserify时无法添加与browserify捆绑的库,参见this问题。
此功能将在 browserify 17 中推出,所以现在,我切换到 webpack 来构建我的库。