private npm模块在本地工作,但不作为已发布的node_module

时间:2017-10-20 17:56:56

标签: reactjs webpack loader antd npm-publish

我创建了一个私有的npm模块,当我在本地运行应用程序时,该模块工作正常。当我使用npm publish时,它也会成功发布。但是,它依赖于库antd,如果我把它留在依赖,它会说它找不到antd@2.12.1。所以我将它移动到peerDependencies然后它将安装。当我尝试从我成功安装的npm包中导入任何组件(我从最简单的测试用例开始)时,它会抛出此错误:

Module parse failed: Unexpected token (5:2)
You may need an appropriate loader to handle this file type.
| 
| const Module = ({children}) => (
|   <span className=`module-title`>{children}</span>
| )
| 

无论是否是使用antd的模块,上述加载程序问题都会显示出来。我的应用程序是使用webpack。我的webpack的模块:加载器部分可以在下面找到:

module: {
    loaders: [
      { test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
        // include: /node_modules\/@nuralogix\/dfx-ui\/src/
      },
      { test: /\.jsx?$/,
        loader: 'babel-loader',
        exclude: /node_modules/, 
        // include: /node_modules\/@nuralogix\/dfx-ui\/src/
      },
      { test: /\.global\.css$/,
        use: [ 'style-loader', 'css-loader' ]
      },
      { test: /^((?!\.global).)*\.css$/,
        use: [ 'style-loader', 'css-loader' ]
      },
      { test: /\.global\.less$/,
        use: [ 'style-loader', 'css-loader', 'less-loader' ]
      },
      { test: /^((?!\.global).)*\.less$/,
        use: [ 'style-loader', 'css-loader', 'less-loader' ]
      },

include:中的评论过去有帮助,但目前会导致错误。

我非常感谢有关为什么我不能使用这个模块的任何建议或想法(尽管看似简单)。

Babel文件供参考:

{
  "presets": [
    ["env", {
      "targets": { "node": 7 },
      "useBuiltIns": true
    }],
    "stage-0",
    "react"
  ],
  "env": {
    "production": {
      "presets": ["react-optimize"],
      "plugins": [
        "babel-plugin-dev-expression",
          ["import", {"libraryName": "antd", "style": true}]
      ]
    },
    "development": {
      "plugins": [
        "transform-class-properties",
        "transform-es2015-classes",
          ["import", {"libraryName": "antd", "style": true} ]
      ]
    }
  }
}

注意:我非常有信心我没有正确编译成es5。我已经添加了这两个脚本并在我的package.json

中安装了相关文件
"compile": "rimraf lib/* && babel src -d lib",
"prepare": "npm run compile"

现在,我收到了这个错误:

sh: 1: babel: not found
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! packageName compile: 'rimraf lib/* && babel src -d lib'
npm ERR! spawn ENOENT

我的.babelrc文件与上面相同,只是我添加了:

"transform-runtime",

对dev和prod。

是否有人有使用rimraf或其他任何东西创建用于将es6编译为es5的脚本的经验?

作为参考,我基于本文的大部分新增内容:

http://blog.xebia.com/publishing-es6-code-to-npm/

1 个答案:

答案 0 :(得分:0)

事实上,答案很简单。

在根文件夹中创建.npmignore,将源添加到忽略列表,例如

/src
/node_modules
.git