svg.js这个包无法正常运用 追寻仓库发现,这这一步仍是正常的

[✔️]cocos creator 2.x无法加载.js后缀的npm包

到这一步就发现把.js后缀给干掉了

[✔️]cocos creator 2.x无法加载.js后缀的npm包

中心处理的这一步,代码加密了,或许认为这是个js文件,所以就强行把.js去掉了,没有考虑到有些npm package竟然也以.js结束

[✔️]cocos creator 2.x无法加载.js后缀的npm包

解决方案

  1. 自己把这个package改名,在npm上从头发布一下,项目中运用改名后的package
  2. 假如运用的是webpack打包,能够在装备中加入externals,也便是将svg.js不扫除,代码直接打进bundle里边,运转的时候不会从外部require,也就防止了这个问题

cc-plugin便是运用的externals,将.js结束的package不扫除,直接打进bundle里边

webpack externals

Webpack 中,externals 是一个装备项,用于指定哪些模块不该被打包进输出的 bundle 文件中,而应该作为外部依靠引进。这能够显著减小 bundle 文件的大小,加快网页加载速度,同时也能够防止代码重复。

在装备文件中,externals 能够是一个目标、函数,或许一个字符串。其一般的形式如下:

module.exports = {
  // ...
  externals: {
    'jquery': 'jQuery',
    'react': 'React',
    // ...
  },
};

其中,键是需求扫除的模块名,值是模块在大局环境中的变量名。例如,上面的装备表明将 jqueryreact 扫除在打包范围之外,而在运转时从大局环境中获取它们。

还有一种更高效的用法是运用正则表达式来匹配模块名,例如:

module.exports = {
  // ...
  externals: {
    '/^lib/': 'commonjs2 lib',
    // ...
  },
};

这个装备将一切以 lib/ 开头的模块都扫除在打包范围之外。

externals 的另一个常见用处是在不同的构建中共享某些模块。例如,咱们能够将大部分代码打包成一个 vendor bundle,然后再将一些常用的库(如reactlodash 等)扫除在构建范围之外。这样能够缩短编译时刻,同时也能使得这些库被多个进口共享,从而减小网页加载时刻。

需求留意的是,运用 externals 需求特别慎重,因为一旦装备不妥,或许会导致程序运转犯错或许依靠模块无法加载。