【问题标题】:How do I include javascript+css from node_modules in ionic 2?如何在 ionic 2 中包含来自 node_modules 的 javascript+css?
【发布时间】:2017-04-18 01:19:29
【问题描述】:

我需要在我的 ionic 2 应用程序中包含 fullcalendar 和 chart.js。 (离子 2 RC.3) 我已经使用 npm 安装了相关模块,脚本在我的 node_modules 文件夹中。
如何正确地将 node_modules 文件夹中的脚本/css 包含到我的应用中?

我尝试过的事情:

  • 手动将相关js/css文件复制到www文件夹中,并 用 index.html 中的普通 <script><link> 元素引用它们。 (我主要是让它工作,但它看起来非常笨重)
  • 将它们导入我的 app.module.ts 和/或我的自定义 component.ts 文件中,例如 import 'chart.js/dist/Chart.bundle.min.js'; (这种工作,但我得到底层脚本找不到jQuery的错误,所以我仍然必须像上面那样手动将jQuery包含在index.html中)

肯定有更好的方法吗?

【问题讨论】:

    标签: ionic2


    【解决方案1】:

    我相信这是我见过的最干净的方法。

    我们实际上是要覆盖 ionic 构建脚本的复制部分。他们创建了构建脚本来鼓励这一点并使其变得简单。

    假设您已经使用 npm 安装了您需要的任何库:

    npm install chart.js --save
    

    (将 chart.js 库安装到项目根目录下的 node_packages 文件夹中)

    查看 /node_modules/@ionic/app-scripts/config/copy.config.js。这是我们要覆盖的内容,因此将其内容复制到 /config/copy.config.js 的文件中(您需要创建 /config 文件夹)。

    module.exports = {
      include: [
        {
          src: '{{SRC}}/assets/',
          dest: '{{WWW}}/assets/'
        },
        {
          src: '{{SRC}}/index.html',
          dest: '{{WWW}}/index.html'
        },
        {
          src: '{{SRC}}/manifest.json',
          dest: '{{WWW}}/manifest.json'
        },
        {
          src: '{{SRC}}/service-worker.js',
          dest: '{{WWW}}/service-worker.js'
        },
        {
          src: 'node_modules/ionic-angular/polyfills/polyfills.js',
          dest: '{{BUILD}}/polyfills.js'
        },
        {
          src: 'node_modules/ionicons/dist/fonts/',
          dest: '{{WWW}}/assets/fonts/'
        },
        {
          src: './node_modules/chart.js/dist/Chart.bundle.min.js',
          dest: '{{BUILD}}/Chart.bundle.min.js'
        },
      ]
    };
    

    最后一部分是我们添加的部分,将 chart.js 文件复制到实际会被拉入构建的位置。

    要使用我们的脚本,需要告知 package.json,因此将这个“config”部分添加到您的 /package.json 文件中:

    "config": {
        "ionic_copy": "./config/copy.config.js"
    },
    

    现在,当您构建时,文件将被复制,并且在第一个完成后显然更容易添加更多。您还可以覆盖离子构建过程的其他部分,值得研究。

    https://ionicframework.com/docs/v2/resources/app-scripts/

    现在您可以轻松调用它,一个选项在 index.html 中:

    <script src="build/Chart.bundle.min.js"></script>
    

    好处是,如果您安装了模块更新,更改的文件将在您的构建中得到更新,而且,一切都可以通过 vcs 和设置新环境轻松解决,因为依赖项由 npm 和我们的脚本扩展处理照顾一切。 :-)

    希望对您有所帮助! :-)

    【讨论】:

    • 感谢您的解决方案。它奏效了,有点。但是,由于我在 package.json 中添加了“ionic_copy”,我的 Ionic 2 项目的实时重新加载功能停止工作。假设我在我的项目目录中修改了一个 .ts 文件并保存了它,实时重新加载应该会自动刷新工作项目,但现在它不会。有什么建议吗?
    • 感谢您提供的解决方案,帮助很大。
    • 这个建议很有效!但是,如果您不想在索引文件中添加标签,请在 ts 文件中使用 import 语句,在 sass 文件中使用 @import 语句。覆盖 copy.config.js 要求您还覆盖 watch.config.js 文件,以便您的实时重新加载工作。只需复制 @ionic/app-scripts/config 中的原始配置并将 require() 命令指向相对的 node_modules 位置。干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 2018-01-24
    • 2012-12-21
    • 2017-06-13
    相关资源
    最近更新 更多