Systemjs

2021-01-27  本文已影响0人  隐号骑士

一个问题

可以在浏览器中引入esm包吗?

index.html

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

main.js

import Vue from 'https://cdn.bootcdn.net/ajax/libs/vue/2.5.18/vue.esm.browser.js'

console.log(Vue)

报错 Uncaught SyntaxError: Cannot use import statement outside a module

<script> - HTML(超文本标记语言) | MDN

如果type属性为module,代码会被当作JavaScript模块 。

index.html

<script type='module' src="./main.js"></script>

成功打印出了Vue构造器

进一步?

能否像在日常开发中那样写代码,如

import Vue from 'vue'

没有npm,没有node_modules,通过网络资源加载

此时要用上 Import maps

    <script type="importmap">
        {
          "imports": {
            "vue": "https://cdn.bootcdn.net/ajax/libs/vue/2.5.18/vue.esm.browser.js",
          }
        }
    </script>

但浏览器不太支持~

此时system.js上场

根据 Javascript Tutorial: SystemJS intro 介绍,System.js 的特性有

1 polyfill for import maps
2 one file with multiple modules (one network) (System.set System.register)
3 able to look at all the javascript modules right now (System.get System.has)
4 import.meta.resolve
5 import.meta.url give you the url of the current file (when we are inside of)
6 surport JSON HTML CSS modules in browser javascript modules

使用

index.html

<script type="systemjs-importmap">
        {
          "imports": {
            "vue": "https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"
          }
        }
    </script>
  <body>
    <script type="systemjs-module" src="./main.js"></script>
    <div id="container">
        {{date}}
    </div>
    <script src='https://cdn.jsdelivr.net/npm/systemjs/dist/system.js'></script>
  </body>

main.js

const vue = System.import("vue").then(e => {
    const Vue = e.default
    new Vue({
        el: '#container',
        data :{
            date: '2021'
        }
    })
})
上一篇下一篇

猜你喜欢

热点阅读