我可以使用unpkg或browserify在前端项目中包含单个NPM包吗?

时间:2017-11-30 20:41:23

标签: javascript browserify unpkg

所以我在前端使用JS,为客户构建一些东西。除了我没有节点访问权限之外,细节并不是非常重要。

我正在使用unpkg在浏览器中包含各种NPM包(例如React / ReactDOM / Babel)。这些软件包具有UMD构建,因此它们可以开箱即用。

但是,我想使用一些没有UMD版本的软件包(即react-date或react-datepicker)。我尝试通过unpkg提供不同的文件并引用导出的模块。由于他们没有UMD版本,我会收到错误module is not defined,或者我正在引用的模块DatePicker is not defined

所以我想也许我可以使用browserify构建一个文件,但我以前从未使用过它,而且我找不到任何文档。继承人我做了什么

var DatePicker = require("react-dates");

在名为test.js的文件中,然后:

browserify test.js -o bundle.js

输出,将其上传到客户资产,引用它:

<script src="/js/bundle.js"></script>

但是var DatePicker = require("DatePicker")会引发错误require is not defined(我认为这是浏览器的重点?)而console.log(DatePicker)也会抛出is not defined

此时我不知所措。我很顽固,但我真的只是想使用一个反应日期选择器,并避免将jQuery添加到此项目中,仅用于日期选择器。据我所知,unpkg不是一个选项,但我觉得browserify可以工作,我只是做错了。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您不必执行此操作,您可以在“npm”后找到dist文件夹中的所需文件( 新文件夹 \ node_modules \ react-datepicker )在文件夹中安装react-datepicker,但请确保你有一个包文件,否则安装将无法正常工作。

文件应如下所示

enter image description here

编辑:

您需要的requirejs代码是

<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.2/require.min.js"></script>

<script>
    requirejs.config({
        paths: {
            'react': 'https://unpkg.com/react@15.3.2/dist/react',
            'react-dom': 'https://unpkg.com/react-dom@15.3.2/dist/react-dom',
            'prop-types': 'https://unpkg.com/prop-types@15.6.0/prop-types',
            'react-onclickoutside': 'https://unpkg.com/react-onclickoutside@6.7.0/dist/react-onclickoutside',
            'react-popper': 'https://unpkg.com/react-popper@0.7.4/dist/react-popper',
            'moment': 'https://unpkg.com/moment@2.19.3/moment',
            'datepicker': 'https://unpkg.com/react-datepicker@0.61.0/dist/react-datepicker'
        }
    });

    requirejs(['react', 'react-dom', 'prop-types', 'react-onclickoutside', 'react-popper', 'moment', 'datepicker'], function(React, ReactDOM, PropTypes, onClickOutside, Popper, moment, DatePicker) {
        ReactDOM.render(
            React.createElement('p', {}, 'Hello, World!'),
            document.getElementById('root')
        )
    });

但据我所知,datepicker请求“模块”未定义,这可能与here的问题相同。我会更多地研究这个问题。