Browserify无法找到npm模块

时间:2016-01-20 10:41:11

标签: reactjs npm ecmascript-6 browserify

我正在努力创建一个非常痛苦的NPM模块:react-smallgrid

import React from 'react';
import _ from 'lodash';


export default class SmallGrid extends React.Component{

编译:

browserify: {
    options: {
        transform: [
            ['babelify', {
                presets: ['react', 'es2015']
            }]
        ]
    },

    jsx: {
        files: {
            './dist/js/smallgrid.js': [
                './src/smallgrid.jsx',
            ]
        }
    },

当我在另一个项目/ jsx中导入js文件并尝试对其进行浏览时,会出现错误:

  
    

错误:无法从'/ Users / me / code / react-smallgrid / dist / js'找到模块'./ReactMount'

  

我认为它已经编译好了吗?我不明白这一点。

同时

我尝试使用webpack构建它,它提供以下输出:

> webpack -p

Hash: 00fd87c95d39230bd485
Version: webpack 1.12.11
Time: 14002ms
       Asset    Size  Chunks             Chunk Names
smallgrid.js  248 kB       0  [emitted]  smallgrid
    + 160 hidden modules

WARNING in smallgrid.js from UglifyJs
Condition always true [./~/react/lib/ReactMount.js:764,0]
Condition always true [./~/react/lib/findDOMNode.js:46,0]
Condition always true [./~/react/lib/instantiateReactComponent.js:80,0]

仍然无效。

2 个答案:

答案 0 :(得分:1)

您需要为您的代码提供React库。

运行此选项以添加browserify-shim:

npm i browserify-shim -D

将此添加到您的package.json:

"browserify": {
  "transform": [
    "browserify-shim"
  ]
},
"browser": {
  "react": "./node_modules/react/dist/react.js",
  "react-dom": "./node_modules/react-dom/dist/react-dom.js",
  "lodash": "./node_modules/lodash"
},
"browserify-shim": {
  "./node_modules/react/dist/react.js": "React",
  "./node_modules/react-dom/dist/react-dom.js": "ReactDOM",
  "./node_modules/lodash": "lodash"
}

顺便说一下,您还可以在配置中使用browserify externals来进一步减少生成的包。最好不要包含例如:React in your bundle。

注意:

我还在Github中向您发送了PR以获得解决方案。

答案 1 :(得分:0)

您的问题似乎是您提供了已编译的代码作为您的库。转换后的代码在内部包含ReactMount。您应该提供用作库的源代码。然后它将使用browserify正确转换。查看任何其他npm库,我认为您将看到它们提供了在您的导入中使用的源。

正如您在评论中指出的那样。 Cannot import ES2015 module中的@ madox2回复了;



"scripts": {
    "compile": "babel --presets es2015,stage-0 -d dist/js/ src/"
}




所以,npm install -g babel babel-preset-es2015 babel-preset-stage-0。然后npm运行编译。这应该将您的转换代码放入dist / js。