记一次npm不发布的情况下调试依赖包遇到的问题

问题场景是这样,项目project-a依赖一个sdk项目module-b,项目project-a通过npm install添加module-b到项目中使用。当b项目修改时,如何在不发布的情况下调试呢?

方案1.npm link

首先,进入我们的module-b项目,将源码进行build后(build后代码目录要符合npm包规范),执行npm link

cd module-b
npm link

然后,进入npm-link-example项目,执行 npm link npm-link-module

cd project-a
npm link module-b

如果遇到通过npm下载自己的包不报错,而使用npm link 本地调试的时候报错的情况。原因是:使用 npm package, webpack 在项目引入前将代码编译成 ES6 模块语法,所以不会报错。而使用 npm link 会将 npm 包放在本机的全局 /node_modules 下,这个目录下的文件不会预先编译成 ES6 模块方法。webpack修改配置即可:

export default {
  resolve: {
    symlinks: false
  }....

方案2.webpack配置别名

  resolve: {
    extensions: ['.js', '.jsx', '.json'],
    modules: [path.join(__dirname, 'app'), 'node_modules'],
    alias: {
      'module-b': '/xxx/module-b.js', //库文件绝对路径

这个测试过程中遇到了另外一个问题,module-b使用了babel7进行编译。而project-a使用的babel6.在project-a编译时

Requires Babel "^7.0.0-0", but was loaded with "6.26.3".
 If you are sure you have a compatible version of @babel/core, it is likely that something in your build process is loading the wrong version. Inspect the stack trace of this error to look for the first entry that doesn't mention "@babel/core"
or "babel-core" to see what is calling Babel.

解决方法,如果是已经用babel编译的模块,无需再做一次babel编译,可以将此目录加到babel6项目中的过滤配置里。

{
  "presets": [
  ],
  "ignore": "\\module-b\\.js"
}

你可能感兴趣的:(webpack)